要區分來源就要寫代碼實現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