.NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处理
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作
.NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务
.NetCore 下开发独立的(RPL)含有界面的组件包 (三)构建界面
.NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
.NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处 理
.NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能
前面一篇中处理授权类,但是不难发现我们时间上处理业务也是难以扩展,为了做到更好的扩展,我这里需要加入一些参数来做处理,加入什么参数合适呢?
其实在中间件中有 上下文对象 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)含有界面的组件包 (五)授权过滤参数处理的更多相关文章
- .NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- .NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- .NetCore 下开发独立的(RPL)含有界面的组件包 (三)构建界面
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服务
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- .NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作 .NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务 .NetCore 下开发独立的(RPL)含 ...
- Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)
ASP.NET Core知多少系列:总体介绍及目录 Demo路径:GitHub-RPL.Demo 1. Introduction Razor Page Library 是ASP.NET Core 2. ...
- 关于在Java EE 下开发web,出现项目中的外部包没有tomcat的包的原因
在新建的项目的时候,要设置目标服务器运行环境,把那个设置成tomcat,这样,项目中就会有tomca的api
- 在桌面Linux环境下开发图形界面程序的方案对比
在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...
- .netcore下的微服务、容器、运维、自动化发布
原文:.netcore下的微服务.容器.运维.自动化发布 微服务 1.1 基本概念 1.1.1 什么是微服务? 微服务架构是SOA思想某一种具体实现.是一种将单应用程序作为一套小型 ...
随机推荐
- mac使用技巧之截图
1.选定区域截图 command+shift+3 选定区域按住control,可以直接截图到剪切板, 按option可以进行比例缩放. 按住shift可以选定区域 按住空格键可以进入窗口截图模式. 2 ...
- python3+selenium入门03-操作谷歌浏览器
操作谷歌浏览器同样也需要下载相应的driver插件,官网下载.也可以从我的网盘下载,不过可能不是最新的,网盘地址.打开谷歌浏览器的操作和火狐的差不过. from selenium import web ...
- strncpy的用法
strncpy是C语言的库函数之一,来自C语言标准库,定义于string.h,函数原型是: char *strncpy(char* dest,char* src,size_t n); 把src所指向的 ...
- web页面加载、解析、渲染过程
仅做学习参考,侵权删 原文链接:风吹De麦浪 https://www.cnblogs.com/CandyManPing/p/6635008.html 一.浏览器 浏览器的主要功能是将用户选择的we ...
- JS导出excel设置下载的标题/与angular结合冲突
2017.8更新 此功能与angular结合使用时,最后一行 document.getElementById("dlink").click(); 与angular的ng-click ...
- 003_crlf注入漏洞
一. (1) 线上收到一个crlf 注入的漏洞. 同时启用80和443才会暴露,配置如下: server { listen 80; listen 443 ssl; server_name www.jy ...
- Js -----后台json数据,前端生成下载text文件
需要引入 <script src="/assets/libs/single_file/jquery.min.js"></script> <script ...
- mybatis xml中不能直接用大于号、小于号要用转义字符
2.使用 <![CDATA[ ]]>标记
- python中的各种锁
一.全局解释器锁(GIL) 1.什么是全局解释器锁 在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他的线程就必须等待该线程的全局解释器(cpu)使 用权消失后才能使用全局解释 ...
- jQuery-lazyload参数
1.placeholder placeholder:'图片地址',用图片提前占据将要加载的图片的位置. 2.effect effect:‘fadeIn’ 表示用何种效果载入,eg:show()直接加载 ...