Beetlex服务框架之Webapi访问限制和url重写
在新版本的BeetleX.FastHttpApi中集成了IP访问策略和URL重写两个功能,通过IP访问策略可以制定服务针对不同IP的访问限制控制;而URL重写则可以制定更好的URL访问方式。以下介绍这两的功能的使用:
IP策略
组件在1.6.7
开始集成了IP限制功能,可以通过配置白名单或黑名单的方式来配置可访问的IP。该功能默认情况是禁用,如果有需要则打开此功能来对访问进行限制(该功能暂只对IPv4有效,IPv6则暂时无效)。
配置
可以通过HttpApiServer.IPv4Tables.Type
配置IP访问限制,默认值是None
不开启,配置Black
开启默名单限制,所有在黑名单中的IP不能访问服务;配置White
开启白名单,所有在白名单中的IP才能访问服务。可以通过以下方法来添加IP
AddWhite
方法添加白名单IP
HttpApiServer.IPv4Tables.AddWhite("192.168.2.1/24","192.168.1.18");
AddBlack
方法添加黑名单IP
HttpApiServer.IPv4Tables.AddBlack("192.168.2.1/24","192.168.1.18");
配置文件
可以通过文件来配置,在目录下编辑iptables.json
(如果文件不存在自行添加)
{
"Type": "White",
"WhiteList": [ "192.168.2.1/24", "192.168.2.18" ],
"BlackList": [ "192.168.2.1/24" ]
}
Url重写
通过Url重写可以提高Url访问友好性同时不需要调整原有服务的Url访问地址,组件在新版本对Url重写进行的优化调整,以支持更灵活的重写功能。
配置
可以通过HttpApiServer.UrlRewrite.Add
方法来添加Url重写规则.
server.UrlRewrite.Add("/cate/{0}.html", "/index.html");
以上重写是把/cate/
下面的所有html重写到index.html
.
配置文件
如果不想通过写代码来完成,可以配置目录下的rewrite.json
文件(不存在则自行添加)
[
{
"Url": "/cate/{0}.html",
"Rewrite": "/index.html"
}
]
详细描述
组件对Url重写的依据是BaseUrl
基础访问路径进行匹配,匹配方式不匹分大小写。通过{name}
来描述一个Url的可变部分,name
是一个变量名,这个变量可以在重写Url部分使用,一个Url可以有多个变量描述.这些重写的变量都会被写入到HttpContext的请求数据中,更方便绑定到控制器参数上.
示例一
{
"Url": "/api/customers/{count}",
"Rewrite": "/customers/{count}"
}
示例二
{
"Url": "/api/{user}/{id}",
"Rewrite": "/api/{user}?id={id}"
}
官方blog
server.UrlRewrite.Add("/cate/{0}.html", "/index.html", "html")
.Add("/search/{0}.html", "/index.html", "html")
.Add("/tag/{0}.html", "/index.html", "html")
.Add("/blog/{0}.html", "/blog.html", "html")
.Add("/photos/{0}.html", "/photos.html", "html");
以上是 http://ikende.com/blog/ 的一个重写规则,把分类,标签和查询都路由到index.html
页面处理了。
动态重写
静态规则有时候很难满足应用的需要,因此组件HttpRequest
提供UrlRewriteTo
方法用于重写当前的请求Url。那什么时候使用动态重写呢?以下描述一个简单的场景来表述动态重写的作用,当一个API提供了一个V1版后又开发了V2版本,但希望用户在不改变Url基础规则的情况可以兼容两种版本的调用;出现这情况一般会想到在前置代理做一些转发规则来满足需求,但组件提供动态重写则可以满足这样的需求。
[Controller(BaseUrl = "Api")]
public class Api
{
public object Hello(string name)
{
return $"hello {name} {DateTime.Now}";
}
} [Controller(BaseUrl = "/v2/Api")]
public class ApiV2 : IController
{
public object Hello(string name)
{
return $"hello {name} {DateTime.Now} v2";
}
[NotAction]
public void Init(HttpApiServer server, string path)
{
server.HttpRequesting += (o, e) =>
{
if (e.Request.BaseUrl.IndexOf("/api", StringComparison.OrdinalIgnoreCase) >= )
{
if (e.Request.Data["version"] == "v2")
{
e.Request.UrlRewriteTo("/v2" + e.Request.Url);
}
}
};
}
}
只需要在实现V2版本中对HttpRequesting
进行一个监听并根据情况进行处理即可以;而V1的代码无须更改,已有的Url没有变化,只需要在新的调用中添加对应的版本描述即实现。
Url重写是BeetleX的webapi基础功能,因此对应的服务网关也可以定义相关url重写功能用于服务转发上.服务网关重写插件使用:https://github.com/IKende/Bumblebee/wiki/Url重写
Beetlex服务框架之Webapi访问限制和url重写的更多相关文章
- Beetlex服务框架之Webapi版本访问控制
在应用服务中API更新是很普遍的事情,为了服务良好地运作很多时候需要新旧版本同时兼容:为了应对这一系列的需求FastHttpApi在新版中强化了Url重写机制来支持API访问版本控制,由原来固定的重写 ...
- 009.CI4框架CodeIgniter, 网页访问GET的URL参数获取,分段输出URL参数
01.代码如下,我们给在PHP CI4框架中定义了一个show函数,并给了3个参数,代码如下: <?php namespace App\Controllers\System; use App\C ...
- 微服务框架下的思维变化-OSS.Core基础思路
如今框架两字已经烂大街了,xx公司架构设计随处可见,不过大多看个热闹,这些框架如何来的,细节又是如何思考的,相互之间的隔离依据又是什么...相信很多朋友应该依然存在自己的疑惑,特别是越来越火热的微服务 ...
- Spring-boot:快速搭建微服务框架
前言: Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并 ...
- “一切都是消息”--MSF(消息服务框架)入门简介
“一切都是消息”--这是MSF(消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分. 1,M ...
- “一切都是消息”--iMSF(即时消息服务框架)入门简介
“一切都是消息”--这是iMSF(即时消息服务框架)的设计哲学. MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately) ...
- 让techempower帮你通讯服务框架的性能
在编写服务应用框架的时候一般都需要进行性能测试,但自己测试毕竟资源受限所以很难做更高性能上的测试.其实GitHub上有一个项目可以让开发人员提交自己的框架服务代码然后进行一个标准测试:现在已经有上百个 ...
- BeetleX服务网关之服务发现与泛域名路由
在新版本的服务网关中提供了服务发现和泛域名路由解决功能,服务发现可以在无须配置的情况下实现服务自动注册到网关中解脱对服务配置的繁琐工作:而泛域名路由则可以针对不同的域名制定不同的负载规则. 使用con ...
- 通过lms.samples熟悉lms微服务框架的使用
经过一段时间的开发与测试,终于发布了Lms框架的第一个正式版本(1.0.0版本),并给出了lms框架的样例项目lms.samples.本文通过对lms.samples的介绍,简述如何通过lms框架快速 ...
随机推荐
- 基于 VMware 的超融合, 解析 vSAN 与 SmartX ZBS 的优劣差异
在企业级IT领域从业多年,最近越来越多地听到圈内人谈论起超融合技术的种种好处.的确,超融合技术已越来越走向成熟,带来的价值也逐渐凸显.它可靠性高,资源消耗低,尤其是运维部署非常便捷.在企业基础架构领域 ...
- java需要了解和学习的技能
一:系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节.扫清主要难点的技术人员.主要着眼于系统的“技术实现”.因此他/她应该是特定的开发平台.语言.工具的大师 ...
- 连环清洁工之特殊任务--java资源如何关闭?
小C是一名特殊的黑客,他专门为黑客提供服务,扫除黑客攻击的痕迹,避免被查到为何人攻击. 今天他正兴致勃勃的玩游戏<连环清洁工>,连环清洁工是由iFun4all S.A.制作发行的一款犯罪题 ...
- .NET分布式大规模计算利器-Orleans(一)
写在前面 Orleans是基于Actor模型思想的.NET领域的框架,它提供了一种直接而简单的方法来构建分布式大规模计算应用程序,而无需学习和应用复杂的并发或其他扩展模式.我在2015年下半年开始 ...
- [AWS] Lambda by Python
当前统治数据分析的语言还是Python,还是暂时走:Python + GPU的常规路线好了. numba, pyculib (分装了cublas) Ref: 使用 Python 构建 Lambda 函 ...
- 【笔试题】Java笔试题知识点
Java高概率笔试题知识点 Java语法基础部分 [解析]java命令程序执行字节码文件是,不能跟文件的后缀名! 1.包的名字都应该是由小写单词组成,它们全都是小写字母,即便中间的单词亦是如此 2.类 ...
- 用 C# 来守护 Python 进程
背景 目前我主要负责的一个项目是一个 C/S 架构的客户端开发,前端主要是通过 WPF 相关技术来实现,后端是通过 Python 来实现,前后端的数据通信则是通过 MQ 的方式来进行处理.由于 Pyt ...
- 基于Coravel定时任务之物联网设备数量统计
目录 基于Coravel定时任务之物联网设备数量统计 1 应用背景 2 对比各家定时库 2.1 TaskScheduler 2.2 Fluent Scheduler 2.3 Quartz.net 2. ...
- C语言入门-数组
今天十月一日,上午看阅兵激情澎湃,但是下午还是要继续写C语言,前面的这块很简单 int number[100]; scanf("%d" , &number[i]); 一.定 ...
- cmd控制台 wrapper | OpenSCManager failed - 拒绝访问。 (0x5)解决
在windows上安装mycat执行命令时, D:\develop\Mycat\bin>mycat.bat install 返回wrapper | OpenSCManager failed - ...