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

  • 相关阅读:
    设计模式3.1 Abstract Factory(抽象工厂)对象创建型模式
    设计模式文本编辑器
    Jquery调用webService远程访问出错的解决方法
    重构列表
    设计模式3.创建型模式
    设计模式 3.2 Builder(生成器)对象创建型模式
    设计模式 3.4 Prototype(原型)对象创建模式
    设计模式3.3 Factory Method(工厂方法) 对象创建型模式
    C# Word.Office操作总结
    设计模式 3.5 Singleton(单件)对象创建型模式
  • 原文地址:https://www.cnblogs.com/fblogs/p/12295892.html
Copyright © 2011-2022 走看看