MVC中使用过滤器做权限认证需要注意的地方
最近一项目接近尾声,正准备调试的时候发现一条原本不应该执行的SQL语句执行报错了,本就不应该执行,所以当然也就出错,找了一下,问题如下。
我这里是直接重写OnActionExecuting方法来达到目的的,在执行方法之前,如果用户没有通过认证,则跳转到登录页面,看起来挺正常的,没什么问题。
但实际上,即使是执行了跳转代码,当跳出OnActionExecuting方法后,我们写在控制器的方法中的代码仍然会执行,如果其中又涉及到什么敏感的操作,问题就比较严重了。
//错误:HttpContext.Current.Response.Redirect("/" + backstageAddress + "/Home/Login"); //正确:filterContext.Result = new RedirectResult("/" + backstageAddress + "/Home/Login");
换为正确的方法进行跳转后,控制器方法里面的代码就没有执行了。
之前用的错误方式,完完全全是为了省事儿图方便,但实际上却是后患无穷,真是细节决定成败呢,呵呵。