.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思想某一种具体实现.是一种将单应用程序作为一套小型 ...
随机推荐
- 【转】python 历险记(四)— python 中常用的 json 操作
[转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...
- matplotlib 直方图绘制详解
n, bins, patches = plt.hist(datasets, bins, normed=False, facecolor=None, alpha=None) 函数说明 用于绘制多个数据集 ...
- vc++基础班[27]---实现一个简单的任务管理器
因为任务管理器中涉及到进程的枚举操作,所以把两节课的知识点合并到一起来讲! ①.设计界面.以及列表控件变量的绑定: ②.列表控件样式的指定: m_TaskList.SetExtendedSty ...
- unity提示can't add script解决办法
1.脚本有误没有继承unity类. 2.类名文件名不一致. 3.内部逻辑代码有误.
- 博客主Judge已跳槽搬家emmm
跳槽网站:博客园 顺便带一下:洛谷blog (好久没更了QAQ...) ### 不过csdn上还是会照常更新的,毕竟用着方便
- OpenCV中RGB和HSV转换的问题
1.一般情况下HSV模型各分量的取值范围为:H为0到360°,S为0到100%,V为0到255.但是在OpenCV中在由RGB转换到HSV的过程中,发现HSV中H为0到180°,S为0到255,V为0 ...
- HDU 5377 (Exgcd + 原根)
转载自:大牛 知道一个定理了 a ^ x = y (mod p) ===>> logd(a) * x = logd(y) (mod O(p) ) d 为 p 的 原根, O ...
- 如何在Mac 终端上Git 项目的一次常规操作
首先,Git的工作流是怎样的? 你的本地仓库由 git 维护的三棵“树”组成. 第一个是你的 工作目录,它持有实际文件: 第二个是 暂存区(Index),它像个缓存区域,临时保存你的改动: 最后是 H ...
- C# pdf转word
引用组件 Spire.Pdf,去官网下载安装,在bin目录里面有需要的dll文件. static void Main(string[] args) { #region Pdf转word PdfDocu ...
- 利用zxing生成二维码
使用zxing类库可以很容易生成二维码QRCode,主要代码如下: private Bitmap createQRCode(String str,int width,int height) { Bit ...