有时候,我们需要根据调用来源判断该次请求是否允许放行,这时候可以使用Sentinel的来源访问控制的功能。来源访问控制资源的请求来源(origin)限制资源是否通过。
比如某资源的访问分为pc,mobile和app 三端都会调用。我们希望禁止app端的访问。
那么我们就需要从request里面获取标识信息。
请求来源为黑名单不通过,其它均可以通过
@Component
public class RequestOriginParserDefinition implements RequestOriginParser {
@Override
public String parseOrigin(HttpServletRequest request) {
//获取request的域,区分请求来源是pc还是app,mobile
String name=request.getParameter("serviceName");
if(StringUtils.isEmpty(name)){
throw new RuntimeException("serviceName is empty");
}
System.out.println(name);
return name;
}
}
请求来源位于白名单可以通过,其它均不可以通过。
我们将app设置为白名单,则只有app端的请求可以通过,其它端均不能通过。
系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体Load、RT、入口QPS、CPU使用率和线程数5个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
系统保护规则是应用整体维度的,而不是针对资源维度,并且仅对入口流量生效。
注:系统规则在实际运用中比较少出现。
解决方案:移除依赖,并删除链路模式对应的配置和代码。
<dependency>
<groupId>com.alibaba.cspgroupId>
<artifactId>sentinel-web-servletartifactId>
dependency>