• 跟我一起学习ASP.NET 4.5 MVC4.0(四)


    前几个文章中介绍了一些关于MVC4.0的东东,今天我们来看一下登陆验证,也可以说是权限验证,即AuthorizeAttribute。这个可以使用在控制器Controller上,也可以使用在Action方法上面,这里最主要的是要介绍怎样将自己的权限验证进行扩展,以及禁止访问的页面转向问题。

    下面我们先看一下代码,然后在进行分析,那样就可以事半功倍了,具体代码如下,当然还可以进行验证扩展,那就看你的需要了。

    复制代码
     1     /// <summary>
     2     /// 权限验证属性。
     3     /// </summary>
     4     public class AuthorizeExAttribute : AuthorizeAttribute
     5     {
     6         /// <summary>
     7         /// 初始化权限验证类。
     8         /// </summary>
     9         /// <param name="permissionName">权限名称。</param>
    10         public AuthorizeExAttribute(string permissionName = "") {
    11             this.PermissionName = permissionName;
    12         }
    13         /// <summary>
    14         /// 获取权限名称。
    15         /// </summary>
    16         public string PermissionName { get; private set; }
    17 
    18         /// <summary>
    19         /// 验证授权。
    20         /// </summary>
    21         /// <param name="httpContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
    22         /// <returns>如果用户已经过授权,则为 true;否则为 false。</returns>
    23         protected override bool AuthorizeCore(HttpContextBase httpContext)
    24         {
    25             if(httpContext == null)
    26                 return false;
    27             if(httpContext.User.Identity.IsAuthenticated)
    28             {
    29                 var user = Users.Current;
    30                 if(!user.IsAnonymous && IsAllow(user) && base.AuthorizeCore(httpContext))
    31                     return true;
    32             }
    33             httpContext.Response.StatusCode = 403;
    34             return false;
    35         }
    36 
    37         private bool IsAllow(User user)
    38         {
    39             //写上验证代码
    40             return true;
    41         }
    42 
    43         /// <summary>
    44         /// 重写验证。
    45         /// </summary>
    46         /// <param name="filterContext">验证信息上下文。</param>
    47         public override void OnAuthorization(AuthorizationContext filterContext)
    48         {
    49             base.OnAuthorization(filterContext);
    50             if(filterContext.HttpContext.Response.StatusCode == 403)
    51             {
    52                 if(filterContext.HttpContext.User.Identity.IsAuthenticated)
    53                     filterContext.Result = new RedirectResult("/AccessError");
    54                 else
    55                     filterContext.Result = new RedirectResult(FormsAuthentication.LoginUrl + "?returnUrl=" + filterContext.HttpContext.Request.UrlReferrer);
    56             } 
    57         }
    复制代码

    58     }

    其中User是本人定义的一个用户实体类,而Users是这个实体类的方法类,这里就补贴出代码,可以自己实现下,因为各个的应用不同。知道了这个权限验证的权限名称,可以通过它来获取权限的值,那样就可以验证当前用户的这个权限是否通过验证。只需要重写他的代码,就可以实现验证了,为了能够告诉前端用户,提示禁止访问信息,这里设置了一个页面就是AccessError页面。

    当然返回的页面也有不一样的,加入是匿名用户就需要让他登录,所以转向到登录页面,而如果是登录的用户就转向到禁止访问提示页面。这只是开发中需要验证的一个过滤器,在ASP.NET MVC开发中会使用到。

    ASP.NET MVC 4.0改进:

    笔者发现在MVC4.0后,微软加了一个AllowAnoumous的过滤器验证,即允许匿名用户访问,方法上的过滤器可以覆盖掉控制器上的标记。这样做有一个好处,因为很多地方都是需要登录后才可以访问的,但是像登录页面,注册页面这些又不需要登录。但是往往都会放在Account控制器中,这样可以方便验证。 由于要上班这里就不多说了,希望能够学到点东西,同时也给他人...

  • 相关阅读:
    模块在insmod之后无法rmmod问题
    FL2440驱动添加(2): RTC(Real time clock)
    虚拟机安装CentOS6.3两个问题
    内核移植和文件系统制作(3)Ramdisk简介和常见问题
    FL2440驱动添加(1):hello world 驱动模块添加
    内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统
    内核移植和文件系统制作(1):根文件系统制作总结
    mysql 5.7.16多源复制
    mysql 5.7安装脚本
    二进制方式快速安装MySQL数据库命令集合
  • 原文地址:https://www.cnblogs.com/zxtceq/p/5166564.html
Copyright © 2020-2023  润新知