• MVC过滤器


    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不想有权限认证的时候,用方法注册,在方法上面注册自定义匿名方法属性

  • 相关阅读:
    如何保证你的路由器安全?
    Jmeter、fiddler、postman 如何模拟ajax请求
    U盘快速格式化和普通格式化有什么区别
    Layui button disabled
    TP连接数据库字符串方式
    Warning: require(D:wamp64wwwxxxpublic/../thinkphp/start.php): failed to open stream: No such file or directory in D:wamp64www xxx publicindex.php on line 17
    [AWS] EC2
    [AWS] EC2
    [AWS] EC2
    [AWS DA
  • 原文地址:https://www.cnblogs.com/fblogs/p/12295892.html
Copyright © 2020-2023  润新知