/**
* 拦截器配置
*/
@Configuration
public class WebHeadFilter {
@Bean
public FilterRegistrationBean modifyParametersFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyHeadFilter());
registration.addUrlPatterns("/*"); // 拦截路径
registration.setName("headParametersFilter"); // 拦截器名称
registration.setOrder(1); // 顺序
return registration;
}
/**
* 自定义拦截器
*/
class MyHeadFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// tenantId信息处理
HeadRequestWrapper headRequestWrapper = new HeadRequestWrapper(request);
if (StringUtils.isBlank(headRequestWrapper.getHeader("tenantId"))) {
headRequestWrapper.addHead("tenantId", DEFAULT_TENANT_ID);
}
TenantInfoUtil.set(headRequestWrapper.getHeader("tenantId"));
// finish
filterChain.doFilter(headRequestWrapper, response);
}
}
/**
* 修改head信息
*/
class HeadRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String> headers;
HeadRequestWrapper(HttpServletRequest request) {
super(request);
this.headers = new HashMap<>();
}
@Override
public String getHeader(String name) {
String headervalue = super.getHeader(name);
if (headers.containsKey(name)) {
headervalue = headers.get(name);
}
return headervalue;
}
@Override
public Enumeration<String> getHeaderNames() {
List<String> values = Collections.list(super.getHeaderNames());
for (String value : headers.keySet()) {
values.add(value);
}
return Collections.enumeration(values);
}
@Override
public Enumeration<String> getHeaders(String name) {
List<String> values = Collections.list(super.getHeaders(name));
if (headers.containsKey(name)) {
values = Arrays.asList(headers.get(name));
}
return Collections.enumeration(values);
}
public void addHead(String name, String value) {
this.headers.put(name, value);
}
}
springboot 拦截器 统一处理head参数工具类
最新推荐文章于 2024-06-11 21:34:01 发布