一. 前言
UrlFirewall 是一个开源、轻便的对http请求进行过滤的中间件,可使用在webapi或者网关(比如Ocelot),由我本人编写,并且开源在github:https://github.com/stulzq/UrlFirewall
二.UrlFirewall 介绍
UrlFirewall 是一款http请求过滤中间件,可以和网关(Ocelot)搭配,实现屏蔽外网访问内部接口,只让内部接口之间相互通讯,而不暴露到外部。它支持黑名单模式和白名单模式,支持自定义http请求响应代码。具有良好的扩展性,可自己实现验证逻辑,从数据库或者Redis缓存等介质实现对规则的检索。
三.使用
1
|
Install-Package UrlFirewall.AspNetCore
|
2.配置DI
1
2
3
4
5
6
7
8
9
10
11
|
public void ConfigureServices(IServiceCollection services)
{
services.AddUrlFirewall(options =>
{
options.RuleType = UrlFirewallRuleType.Black;
options.SetRuleList(Configuration.GetSection( "UrlBlackList" ));
options.StatusCode = HttpStatusCode.NotFound;
});
services.AddMvc();
//...
}
|
3.配置中间件
UrlFirewall中间件的位置必须放在第一个
1
2
3
4
5
6
7
8
9
10
11
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//Configure url firewall middleware. Top most.
app.UseUrlFirewall();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
|
4.配置规则
根据步骤2,使用的Section名称·UrlBlackList·我们在appsettings.json/appsettings.Devolopment.json文件中添加以下配置;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
{
"Logging" : {
"IncludeScopes" : false ,
"LogLevel" : {
"Default" : "Debug" ,
"System" : "Information" ,
"Microsoft" : "Information"
}
},
"UrlBlackList" : [
{
"Url" : "/api/cart/add" ,
"Method" : "All"
},
{
"Url" : "/api/cart/del" ,
"Method" : "Post"
},
{
"Url" : "/api/cart/list" ,
"Method" : "Get"
},
{
"Url" : "/api/product/*" ,
"Method" : "All"
}
]
}
|
Url 字段表示要拦截的http请求url,支持通配符*和?,*表示匹配任意个数任意字符,?表示匹配一个任意字符。Method表示http请求方法,All代表所有,还有Get Post Delete Put。
四.扩展
如果你想要实现自己的验证逻辑,或者从数据库、Redis缓存等介质查询、获取数据来进行验证;你可以实现IUrlFirewallValidator接口,然后调用AddUrlFirewallValidator方法替换默认实现即可。
示例:
1
2
3
4
5
6
|
services.AddUrlFirewall(options =>
{
options.RuleType = UrlFirewallRuleType.Black;
options.SetRuleList(Configuration.GetSection( "UrlBlackList" ));
options.StatusCode = HttpStatusCode.NotFound;
}).AddUrlFirewallValidator<CustomValidator>();
|
五.地址
源码和Demo:https://github.com/stulzq/UrlFirewall
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://www.cnblogs.com/stulzq/p/8987632.html