很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过:
- 若配置白名单,则只有请求来源位于白名单内时才可通过;
- 若配置黑名单,则请求来源位于黑名单时不通过,其余的请求通过。
例如:活动和订单都会调用用户系统获取用户信息,我们可以将活动设置为黑名单
上面的【资源名】和【授权类型】不难理解,但是【流控应用】怎么填写呢?
其实这个位置要填写的是来源标识,Sentinel提供了RequestOriginParser 接口来处理来源。
只要Sentinel保护的接口资源被访问,Sentinel就会调用RequestOriginParser 的实现类去解析访问来源。
第1步: 自定义来源处理规则
@GetMapping("/test")
public String threads1(){
try{
System.out.println(System.currentTimeMillis());
Thread.sleep(3000);
System.out.println(System.currentTimeMillis());
}catch (InterruptedException e){
e.printStackTrace();
}
return "测试流控效果===授权规则test";
}
@Component
public class RequestOriginParserDefinition implements RequestOriginParser{
@Override
public String parseOrigin(HttpServletRequest request) {
String serviceName = request.getParameter("serviceName");
return serviceName;
}
}
第2步: 授权规则配置
这个配置的意思是只有serviceName=app不能访问(黑名单)
正常测试
异常测试:
在feign中将参数设置进去
openFeign的应该,涉及到拦截器
当我们请求的时候,对服务消费者进行拦截,将项目名称或者拦截参数设置到请求头中,在服务消费者中做授权规则限制。
服务消费者添加拦截器
添加拦截器
public class FeignAuthRequestInterceptor implements RequestInterceptor {
private String serviceName;
public FeignAuthRequestInterceptor(String serviceName) {
this.serviceName = serviceName;
}
@Override
public void apply(RequestTemplate template) {
template.header("serviceName",serviceName);
}
}
注册拦截器
@Configuration
public class FeignConfig {
@Value("${spring.application.name}")
private String serviceName;
/**
* 自定义拦截器
* @return
*/
@Bean
public FeignAuthRequestInterceptor feignAuthRequestInterceptor(){
return new FeignAuthRequestInterceptor(serviceName);
}
}
spring
application:
name: msb-order
服务提供者设置规则
@Component
public class RequestOriginParserDefinition implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest httpServletRequest) {
String serviceName =httpServletRequest.getHeader("serviceName");
return serviceName;
}
}
添加规则
文章来源:https://www.toymoban.com/news/detail-550065.html
正常请求
请求被拦截
文章来源地址https://www.toymoban.com/news/detail-550065.html
这个请求的异常对于实际应用非常的不友好,我们应该做统一的异常处理
到了这里,关于Sentionel流控授权规则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!