27:NET5 AOP-Filter扩展定制

权限背景

开发的很多功能页面;如果没有任何拦截,没有任何门槛;
来一个权限认证;有权限就可以访问,否则就拒绝掉;

  1. 一般就是登陆
  2. 用户名+密码登陆一下(在服务器或者浏览器做点标记,针对当前做记录)
  3. 在访问页面的时候;就验证是否登陆过,还可以通过当前用户27:NET5 AOP-Filter扩展定制

    鉴权-授权

    Configure方法,注册

                app.UseAuthentication();//鉴权,检测有没有登录,登录的是谁,赋值给User              app.UseAuthorization();//授权 检测有没有权限,是否能够访问后续的页面功能 

    ConfigureServices方法(鉴权授权)

               services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)              .AddCookie(options =>              {                  options.LoginPath = new PathString("/Main/Login"); //如果授权失败,就跳转到这个路径去中                  //options.AccessDeniedPath = new PathString("/Home/Privacy");              });//用cookie的方式验证,顺便 

    授权的时候: 需要根据用户的信息,进一步去数据库中做一些判断;
    这么办?
    可以支持不同角色,可以支持不同的策略;
    下一篇博客再讲

    Filter多种注册

    1. 中括号标记
    2. TypeFilter
    3. ServiceFilter
      可以放到实体类或方法上。
        // 如果想要控制Filter的执行顺序怎么办?     //使用typeFilter/ServiceFilter的时候可以执行Order;Order值越小 优先执行     [ServiceFilter(typeof(ControllerActionFilterAttribute), Order = -1)]     [TypeFilter(typeof(ControllerActionFilterAttribute), Order = -1)] //注册控制器     [Authorize] ///第四步,表示当前Action 要支持鉴权授权 

    扩展Filter支持依赖注入

    .NET5 Filter支持依赖注入

    1. TypeFilter
    2. ServiceFilter

    自定义

        public class CustomFilterTypeAttribute : Attribute, IFilterFactory, IOrderedFilter     {         private Type _Type = null;         public CustomFilterTypeAttribute(Type type)         {             this._Type = type;         }                   public bool IsReusable => true;          public int Order => -1;          public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)         {             var rsult = (IFilterMetadata)serviceProvider.GetService(_Type);             return rsult;         }     } 

    Filter执行特点

    相当于俄罗斯套娃,最外层至最内,再由最内到最外
    27:NET5 AOP-Filter扩展定制

版权声明:玥玥 发表于 2021-06-07 15:03:18。
转载请注明:27:NET5 AOP-Filter扩展定制 | 女黑客导航