首页 > Web开发 > 详细

MVC过滤器

时间:2020-02-11 18:25:00      阅读:66      评论:0      收藏:0      [点我收藏+]

1.权限认证会用到的属性:

.net framework权限认证属性:[AuthorizeAttribute]

 .net framework自带的匿名支持属性:[AllowAnonymous]

2.MVC框架中的过滤器注册有三种方式:

[CustomAuthorize]-->自定义权限认证属性

2.1).方法注册

技术分享图片

2.2).控制器注册

技术分享图片

2.3).全局注册

2.3.1)在FilterConfig.RegisterGlobalFilters()方法里面注册全局过滤器

技术分享图片

 

 

 2.3.2)全局注册自定义权限认正过滤器

技术分享图片

 

 

 3.AOP:不破坏封装的情况下,增加功能,

自定义权限认证CustomAuthorizeAttribute基于AuthorizeAttribute实现了权限校验,AOP做法。

添加特性可以完成权限验证,这是MVC框架支持的
-->ControllerActionInvoke-->控制器实例化方法执行前-->检查特性--> 如果有权限特性就Invoke--> 看结果---> AOP

4.自定义权限认正CustomAuthorizeAttribute

public class CustomAuthorizeAttribute:AuthorizeAttribute
{
/// <summary>
/// 方法执行前,会执行权限验证
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(AuthorizationContext filterContext)
{
Console.WriteLine(filterContext.HttpContext);//HttpContext中包含请求的所有信息,拿到这个就可以为所欲为了

//如果action方法上面有这个匿名特性,就直接返回,继续向下执行action
if (filterContext.ActionDescriptor.IsDefined(typeof(CustomAllowAnonymousAttribute), true))
{
return;
}
else if (filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(CustomAllowAnonymousAttribute), true))
{
//如果controller上面有这个匿名特性,就直接返回,继续向下执行controller下的action
return;
}
else if (filterContext.HttpContext.Session["CurrentUser"] == null)//session中没有该用户,判断是否登录
{
filterContext.Result = new RedirectResult("~/First/Login");
}
else
{
//判断登录后的用户是否有权限
string account = filterContext.HttpContext.Session["CurrentUser"].ToString();
if (!account.Equals("UserName_123456"))//账户和密码不存在
{
filterContext.Result = new RedirectResult("~/First/Login");
}
else
{
return; //表示继续向下执行Action
}
}

}
}

5.自定义匿名权限认证CustomAllowAnonymousAttribute

技术分享图片

 

 

 6.全局注册权限认证

技术分享图片

7.当某个controller的action不想有权限认证的时候,用方法注册,在方法上面注册自定义匿名方法属性

技术分享图片

 

MVC过滤器

原文:https://www.cnblogs.com/fblogs/p/12295892.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!