分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

.NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处理

发布时间:2023-09-06 02:28责任编辑:白小东关键词:组件

前面一篇中处理授权类,但是不难发现我们时间上处理业务也是难以扩展,为了做到更好的扩展,我这里需要加入一些参数来做处理,加入什么参数合适呢?

其实在中间件中有 上下文对象  HttpContext,有了这个类我们能做的事情就多了,获取Request 、Response以及RequestServices ,获取DI中注册的服务操作自己的业务做验证

那么怎么来处理这个类呢?

是不是直接把HttpContext直接传过去呢? 其实也是可以的,但是为了安全不暴露一些不必要的操作以及设置对一些属性扩展,我们封装了对一个包装类来重新构造一个密封的中间件上下文对象

internal sealed class AdminChinaDashboardContext : DashboardContext ???{ ???????public AdminChinaDashboardContext(HttpContext httpContext) ??????????: base() ???????{ ???????????if (httpContext == null) throw new ArgumentNullException(nameof(httpContext)); ???????????HttpContext = httpContext; ???????????DashboardRequest = new DashboardRequest(httpContext); ???????????DashboardResponse = new DashboardResponse(httpContext); ???????????DashboardRequestServices = httpContext.RequestServices; ???????} ???????public HttpContext HttpContext { get; } ???}
 public class DashboardContext ???{ ???????????????public IServiceProvider DashboardRequestServices{ get; protected set; } ???????public DashboardAbstractRequest DashboardRequest { get; set; } ???????public DashboardAbstractResponse DashboardResponse { get; set; } ???}

DashboardRequest、DashboardResponse 对抽象的对于类重写下某些需要的方法即可,比如获取参数之类的(Query & Form) 其他代码略了

这里DashboardContext 作为参数,对外只暴露抽象类提供的一些操作,接下来我们来修改下代码

首先是中间件的地方我们需要把HttpContext传递过去,包装好一个新的DashboardContext中的对象几个运行外部访问的属性

if (_options.Authorization.Any(auth => !auth.IsAuthorize(new AdminChinaDashboardContext(context)))) ???????????????{ ?????????????????????????????????????context.Response.ContentType = "text/html; charset=utf-8"; ???????????????????await context.Response.WriteAsync("这是没有授权的页面"); ???????????????????return; ???????????????}

然后是在实现的授权过滤器里面处理下

 public class CustomAuthorizeFilter : IDashboardAuthorizationFilter ???{ ???????public bool IsAuthorize(DashboardContext context) ???????{ ???????????return true; ???????} ???}

我们可以通过上下问对象请求处理,以及获取DI的服务操作

最后我们来继续修改代码,淡然你而已获取DI服务,如下面注释的代码一样,根据你自己的业务处理,这里我写了一个GetQuery方法根据参数测试一下,参数值为admin及可授权

public bool IsAuthorize(DashboardContext context) ???????{ ???????????// XXServices xX= ?context.DashboardRequestServices.GetService(typeof(IXXServices)); ???????????string testval = string.Empty; ???????????try ???????????{ ???????????????testval = context.DashboardRequest.GetQuery("test").Trim(); ???????????} ???????????catch ????????????{ ???????????????return false; ???????????} ??????????????????????if (testval == "admin") ???????????????return true; ???????????else return false; ???????}

访问中间件地址,在不输入以及输入其他参数的情况下都是没有授权的处理

只有当我们的地址输入了admin参数值后,中间件才会有作用

.NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处理

原文地址:https://www.cnblogs.com/liyouming/p/10195697.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved