当前位置: 首页 > news >正文

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

原文http://www.cnblogs.com/xdotnet/archive/2012/03/27/aspnet_mvc4_authorize.html

前几个文章中介绍了一些关于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 {  getprivate  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控制器中,这样可以方便 验证。 由于要上班这里就不多说了,希望能够学到点东西,同时也给他人...

关于作者:网魂小兵

文章出处:http://xdotnet.cnblogs.com

本文可以随意转载,摘抄等非商业用途。

为了尊重作者成果,在转载和摘抄的时候请留下作者名称和出处。

 

相关文章:

  • 顶部菜单栏(固定在顶部)
  • 系统安装后的初始环境设置
  • Leveldb -转
  • 陶哲轩实分析 命题7.2.9 绝对收敛判别法
  • NYOJ467 中缀式变后缀式
  • IHttpModule
  • 陶哲轩实分析 命题 7.4.1 证明
  • ASP.NET Cache的一些总结2
  • css样式表在ie6.0中的hack应用
  • 垃圾代码评析——关于《C程序设计伴侣》6.2(一)
  • vlan划分及vlan间通信
  • 数据结构和算法
  • 时钟周期/指令周期/机器周期/总线周期
  • 多项式的乘法满足结合律和交换律
  • lt;备份gt;10月11日系统安装与除错,sudo讲解
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • cookie和session
  • CSS 专业技巧
  • express.js的介绍及使用
  • k8s 面向应用开发者的基础命令
  • mysql常用命令汇总
  • ReactNative开发常用的三方模块
  • Terraform入门 - 1. 安装Terraform
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从0到1:PostCSS 插件开发最佳实践
  • 大数据与云计算学习:数据分析(二)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 关于List、List?、ListObject的区别
  • 近期前端发展计划
  • 前端js -- this指向总结。
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #QT(一种朴素的计算器实现方法)
  • #大学#套接字
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • $().each和$.each的区别
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm码农论坛 毕业设计 231126
  • (六)激光线扫描-三维重建
  • (十一)图像的罗伯特梯度锐化
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 动态调用WebService + WSE + UsernameToken
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .Net小白的大学四年,内含面经
  • .pyc文件是什么?
  • @EventListener注解使用说明