.NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
.NetCore 下开发独立的(RPL)含有界面的组件包 (一)准备工作
.NetCore 下开发独立的(RPL)含有界面的组件包 (二)扩展中间件及服 务
.NetCore 下开发独立的(RPL)含有界面的组件包 (三)构建界面
.NetCore 下开发独立的(RPL)含有界面的组件包 (四)授权过滤
.NetCore 下开发独立的(RPL)含有界面的组件包 (五)授权过滤参数处 理
.NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能
对于我们的组件页面当然不是所有的用户都能访问,所以这里我们需要添加一个我们自己定义的一些授权过滤条件,那么这一块怎么来写呢?
首先我们必然会想到中间件,前面章节说道了中间件路由,我们只需要在路由地址之前校验一下就ok了,有了这个思想我们就来实现一下
当然需要我们自己定义的一些规则,比如组件下面的地址都是根据pathstring来设计,有自己的规则,不然中间件会过滤到其他的中间件路由地址
不如 ,dashboard页面是 /adminchain , 其他功能都可以以 /adminchain 以这个为开始 如: /adminchain/client
那么我们在中间件路由地址前设置下:
string routeUrl = context.Request.Path;
if (routeUrl.StartsWith(_options.PathRoute))
{
//这里做验证
/*
这里是验证内容
*/
if (routeUrl.Equals(_options.PathRoute))
{
var view = new HomeIndex();
await view.ExecuteAsync(context);
}
}
else
{
await _next(context);
}
授权需要自定义,这里就需要把这个加到DashboardOptions中去设置,这里我们在里面多添加了一个授权属性 Authorization,并设置了默认的校验规则
public class DashboardOptions
{
public DashboardOptions()
{
AppPath = "/";
PathRoute = "/adminchina";
Authorization = new[] { new DefaultAuthorizationFilter() };
}
/// <summary>
/// 返回应用路径地址
/// </summary>
public string AppPath { get; set; }
/// <summary>
/// route 地址
/// </summary>
public string PathRoute { get; set; }
/// <summary>
/// 授权校验过滤器
/// </summary>
public IEnumerable<IDashboardAuthorizationFilter> Authorization { get; set; }
}
在IDashboardAuthorizationFilter接口中我们只需要定义一个是否授权就行了,这里我们先不给参数,后面在来做
public interface IDashboardAuthorizationFilter
{
bool IsAuthorize();
}
我们添加了DefaultAuthorizationFilter的默认实现,我们这里来测试下 返回false的处理
public class DefaultAuthorizationFilter : IDashboardAuthorizationFilter
{
public bool IsAuthorize()
{ return false;
}
}
下来继续来写中间件里面的验证
//这里做验证
if (_options.Authorization.Any(auth => !auth.IsAuthorize()))
{ context.Response.ContentType = "text/html; charset=utf-8";
await context.Response.WriteAsync("这是没有授权的页面");
return;
}
当我们访问中间件的时候就经过授权过滤了,其实做到这里其实还不够,因为我们在中间件自定义授权过滤中要根据某些业务获取某些服务,所以里面必须要获取某些服务,所以 IsAuthorize是需要添加参数的,下一章节就来说下这个参数应该写什么,怎么来写

当然这里是采用了默认的授权过滤,这里我们来添加一个自己的Filter,首先我们在WebTest中的UseAdminChina修改下,索性我们就把地址一起修改下,首先添加一个自定义的过滤器
public class CustomAuthorizeFilter : IDashboardAuthorizationFilter
{
public bool IsAuthorize()
{
return true;
}
}
然后在Configure中修改下中间件
app.UseAdminChina(options=> {
options.PathRoute = "/adminchinatest";
options.Authorization = new[] {
new CustomAuthorizeFilter()
};
});
由于这里参数,所以为了达到测试效果,我将默认的授权改成了true,将自定义的改成了false,用来测试自定义的过滤接口知否被处理
public class CustomAuthorizeFilter : IDashboardAuthorizationFilter
{
public bool IsAuthorize()
{
return false;
}
}
我们访问之前的地址发现已经没有了

访问下新的地址

至此,发现我们正在想hanfire这类组件慢慢的靠近,下一篇写一点Filter参数方面的处理
.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思想某一种具体实现.是一种将单应用程序作为一套小型 ...
随机推荐
- Linux 文件系统IO性能优化【转】
转自:https://blog.csdn.net/doitsjz/article/details/50837569 对于LINUX SA来说,服务器性能是需要我们特别关注的,包括CPU.IO.内存等等 ...
- powerdesigner 使用技巧 建模工具 导出sql 导出实体类 导出word
显示comment列 Table Properties(表属性)=>Columns(列)=>Customize Columns and Filter(自定义列过滤) 勾上 comment ...
- 【转】Linux中profile、bashrc、bash_profile之间的区别和联系
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登陆时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/pr ...
- 解决:error LNK2026: 模块对于 SAFESEH 映像是不安全的
用vs2017编译比较老的vc++项目,出现这个错误,解决方案如下: 1.打开该项目的[属性]对话框, 2.点击[链接器]选项, 3.点击[命令行]选项, 4.将 [/SAFESEH:NO ]键入[其 ...
- Go数组和切片定义和初始化
1 前言 切片是动态数组,数组数组是按值赋值,切片是按地址赋值(引用) 2 代码 2.1 数组初始化 func basic_array(){ //var arr2 = [3]int{2,4,6} // ...
- spring3.0+Atomikos 构建jta的分布式事务
摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...
- LuoGu P2420 让我们异或吧
其实......这就是个SB题,本来看到这个题,和树上路径有关 于是--我就欣喜地打了一个树剖上去,结果嘞,异或两遍等于没异或 所以这题和LCA屁关系都没有,所以这题就是个树上DFS!!!! 所以它为 ...
- 整理六百篇web前端知识混总
9个有用的和免费的工具来支持动态网页开发 8个基本的引导工具的网页设计师 11款CSS3动画工具的开发 2016年某前端群题目答案参考 9最好的JavaScript压缩工具 创建响应式布局的10款优秀 ...
- 通过cmd 使用 InstallUtil.exe 命令 操作 windows服务 Windows Service
要安装windows service 首先要找到 InstallUtil.exe,InstallUtil.exe位置在 C:\Windows\Microsoft.NET\Framework\v4.0. ...
- Confluence 6 安全相关问题提交链接
找到和报告安全漏洞 Atlassian 有关安全漏洞的报告细节,请参考如何报告一个安全问题(How to Report a Security Issue)链接. 发布 Confluence 安全公共 ...