使用过滤器来完成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);
        }
    }