使用过滤器来完成MVC的登入控制
Asp.net自带授权验证的功能,使用起来比较简单
1.在action上添加[Authorize]特性标签
2.添加登入功能的action
[HttpPost]//这里用了谓词过滤器,只处理POST的请求 public ActionResult Login(LogInModel login) { if (login.UserName == "admin" && login.Password == "123456") { FormsAuthentication.SetAuthCookie(login.UserName, false); return Redirect("/Customer/ChangePassword"); } return View(); }
3.既然有登入,自然有注销
注销功能的action
[Authorize] public ActionResult LogOut() { FormsAuthentication.SignOut(); return Redirect("/Customer/Login"); } 这样添加后,就可以拒绝未授权的请求,但默认未授权情况下返回的是404错误.有时候需要重写这个验证. 接下来就是自定义验证: 自定义授权过滤器可以继承AuthorizeAttribute这个类,这个类里面有两个方法是要重写的 bool AuthorizeCore(HttpContextBase httpContext):这里主要是授权验证的逻辑处理,返回true的则是通过授权,返回了false则不是。 void HandleUnauthorizedRequest(AuthorizationContext filterContext):这个方法是处理授权失败的事情。
public class MyAuthorizeAttribute:AuthorizeAttribute { protected override bool AuthorizeCore(HttpContextBase httpContext) { //return base.AuthorizeCore(httpContext); return DateTime.Now.Minute % 2 == 0 } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { filterContext.HttpContext.Response.Redirect("/Customer/Login"); //授权失败返回登入页面 //base.HandleUnauthorizedRequest(filterContext); } }