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

  • 相关阅读:
    spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常
    在zepplin 使用spark sql 查询mongodb的数据
    Unable to query from Mongodb from Zeppelin using spark
    spark 与zepplin 版本兼容
    kafka 新旧消费者的区别
    kafka 新生产者发送消息流程
    spark ui acl 不生效的问题分析
    python中if __name__ == '__main__': 的解析
    深入C++的new
    NSSplitView
  • 原文地址:https://www.cnblogs.com/fblogs/p/12295892.html
Copyright © 2011-2022 走看看