要区分来源就要写代码实现RequestOriginParser接口 ,注意是要实现com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser 接口,别搞错接口了。
MyRequestOriginParser.java
package com.codex.terry.sentinel.origin;import com.alibaba.csp.sentinel.adapter.servlet.callback.RequestOriginParser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;/*** 文件名称: MyRequestOriginParser.java* 编写人: yh.zeng* 编写时间: 2024/6/28 19:14* 文件描述: 实现区分来源*/
@Component
public class MyRequestOriginParser implements RequestOriginParser
{@Overridepublic String parseOrigin(HttpServletRequest request) {// 从请求参数中获取名为 origin 的参数并返回// 如果获取不到origin参数,那么就抛异常String origin = request.getParameter("origin");if (StringUtils.isBlank(origin)) {throw new IllegalArgumentException("origin must be specified");}return origin;}
}
添加FilterRegistrationBean,里面添加WebCallbackManager.setRequestOriginParser(new MyRequestOriginParser());代码,完整代码如下:
FilterContextConfig.java
package com.codex.terry.configuration;import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
import com.codex.terry.sentinel.origin.MyRequestOriginParser;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FilterContextConfig {/*** @NOTE 在spring-cloud-alibaba v2.1.1.RELEASE及前,sentinel1.7.0及后,关闭URL PATH聚合需要通过该方式,spring-cloud-alibaba v2.1.1.RELEASE后,可以通过配置关闭:spring.cloud.sentinel.web-context-unify=false* 手动注入Sentinel的过滤器,关闭Sentinel注入CommonFilter实例,修改配置文件中的 spring.cloud.sentinel.filter.enabled=false* 入口资源聚合问题:https://github.com/alibaba/Sentinel/issues/1024