0%

授权规则

授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式

  • 白名单:来源在白名单内的调用者允许访问
  • 黑名单:来源在黑名单内的调用者不允许访问

可以解决绕过网关直接访问微服务的问题

授权方法

  • 实现RequestOriginParser接口,自定义处理逻辑
1
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class HeaderOriginParser implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest request) {

String origin = request.getHeader("origin");

if(StringUtils.isEmpty(origin)) {
origin = "blank";
}
return origin;
}
}
  • 在gateway服务中,利用过滤器添加指定请求头
1
2
3
4
5
6
spring:
cloud:
gateway:
default-filters:
- AddRequestHeader=Truth,Itcast is freaking awesome!
- AddRequestHeader=origin,gateway
  • 在sentinel中添加约定好的授权规则

自定义异常

实现BlockExceptionHandler接口

BlockException包含多个子类:

异常 说明
FlowException 限流异常
ParamFlowException 热点参数限流的异常
DegradeException 降级异常
AuthorityException 授权规则异常
SystemBlockException 系统规则异常

规则持久化

规则管理模式
  • 原始模式:默认模式,将规则保存在内存,重启服务丢失
  • pull模式:控制台将配置的规则推送给Sentinel客户端,客户端会保存到本地文件或数据库中。之后定时轮询更新
  • push模式:控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端监听Nacos,获取配置变更的推送消息,完成本地更新
------ THEEND ------

欢迎关注我的其它发布渠道