• MVC5的AuthorizeAttribute详解


    现今大多数的网站尤其是购物网站都要求你登录后才能继续操作,当你匿名的将商品放入购物车后,不可能匿名购买这时可以转到登录界面让用户进行登录验证。

    适用系统自带的过滤器

    1. MVC5只要将属性[Authorize]置于相关的action之前就行,那么在调用Buy action之前,就会运用Authorize过滤器。
    1         [Authorize]
    2         public ActionResult Buy(int id)
    3         {
    4            //其它购买逻辑代码放在这里
    5             
    6         }

      2. 也可以将属性[Authorize]置于整个Controller之上。这样位于此控制器下的所有action就都运用了此过滤器。

        [Authorize]
        public class UserController : Controller
        {
           //一些action
         }

       3. 也可以将Authorize应用到全部的应用程序的范围类,要使AuthorizeAttribute成为全程序的过滤器,只要将其加入全局过滤器集合RegisterGlobalFilters方法,这个方法位于App_StartFilterConfig.cs:

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
    filters.Add(new System.Web.Mvc.AuthorizeAttribute());
    filters.Add(new HandleErrorAttribute());
    }

      4. 如果我们允许部分的控制器或者action允许匿名访问怎么办?只需要在相应的控制器或者action上添加属性[AllowAnonymous]

    //
    // GET: /Account/Login
    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
    ViewBag.ReturnUrl = returnUrl;
    return View();
    }

      注意:

      全局控制器的应用只适用于MVC的Controller和Action,对于Web Forms,静态页面,和其它的HTTP handlers 都不适用。

    关于使用自己的过滤器:(以下引用kuangkro的博客:http://www.cnblogs.com/xlhblogs/p/3349972.html

    我们不一定要用MVC默认的Authorize授权验证规则,规则可以自己来定,自定义授权过滤器可以继承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);
            }
        }

    然后用到一个行为方法上,

            [MyAuthorize]
            public ActionResult ShowDetail()
            {
                return View();
            }

    每当偶数分钟的时候就可以访问得到这个ShowDetail的视图,否则就会跳到了登陆页面了。

  • 相关阅读:
    ThreadLocal解析
    AIO,BIO,NIO,IO复用,同步,异步,阻塞和非阻塞
    MySql语句
    《Redis开发与运维》
    项目相关
    垃圾回收相关算法
    垃圾回收概述
    StringTable
    执行引擎
    对象的实例化内存布局和访问定位
  • 原文地址:https://www.cnblogs.com/gscvery/p/4304473.html
Copyright © 2020-2023  润新知