27:NET5 AOP-Filter扩展定制

目录

  • 权限背景
  • 传统的授权方式
  • 鉴权-授权
  • Filter多种注册
  • 扩展Filter支持依赖注入
    • 自定义
  • Filter执行特点

权限背景

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

  1. 一般就是登陆
  2. 用户名+密码登陆一下(在服务器或者浏览器做点标记,针对当前做记录)
  3. 在访问页面的时候;就验证是否登陆过,还可以通过当前用户信息做一些数据验证

传统的授权方式

27:NET5 AOP-Filter扩展定制_第1张图片

鉴权-授权

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扩展定制_第2张图片

你可能感兴趣的:(C#高级开发,AOP-Filter扩展定制)