博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟我一起学习ASP.NET 4.5 MVC4.0(四)
阅读量:7078 次
发布时间:2019-06-28

本文共 2395 字,大约阅读时间需要 7 分钟。

原文

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

关于作者:网魂小兵

文章出处:

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

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

 
你可能感兴趣的文章
spring cloud微服务分布式云架构-Spring Cloud Bus
查看>>
Java springcloud B2B2C o2o多用户商城 springcloud架构(十):服务网关zuul初级篇
查看>>
WebVeiw播放H5的video标签的问题
查看>>
为什么说BCH是最安全的数字货币之一?
查看>>
Spring Cloud--Honghu Cloud分布式微服务云系统—组件化
查看>>
Java知识点杂谈
查看>>
C++/Debug模式查看EFL(标志寄存器)详解
查看>>
我的友情链接
查看>>
jsp页面中出现的java代码之国际化
查看>>
Win8应用管理工具 精简( 软件在网上找的)
查看>>
找回删除掉的文件方法,清除回收站也可以。
查看>>
Linux getrlimit和setrlimit函数
查看>>
APT***防护方案–采用整合产品进行全方位防护
查看>>
wampserver 的apache 配置
查看>>
ttlsa教程系列之mongodb——(四)mongodb索引&explain&profile
查看>>
flume分布式日志收集测试
查看>>
asp.net core 2.0 bundleconfig.json
查看>>
linux扩展根分区详细步骤
查看>>
监控数据库服务器的shell脚本
查看>>
Android 项目开发建议标准规范
查看>>