Filter:过滤器
FilterRegistrationBean:过滤器注册类
HttpServletRequestWrapper:在过滤器中把request转化为HttpServletRequestWrapper,方便做一些处理,比如把请求头加入到request
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@SpringBootConfiguration
public FilterRegistrationBean<ParameterFilter> tokenFilter(){
FilterRegistrationBean<ParameterFilter> registration = new FilterRegistrationBean<ParameterFilter>();//新建过滤器注册类
ParameterFilter filter = new ParameterFilter();//添加我们的过滤器
registration.setFilter(filter);
registration.addUrlPatterns("/*");//设置过滤器的URL模式
return registration;
}
----------------------------------------------------------
public class ParameterFilter implements Filter{
@Override
public void doFilter(ServletRequest request,ServletResponse response,FiterChain chain) {
Appcontext.setRequestStartTime(new Date());//1记录进口时间,最开始时间
//2,设置请求id,用于日志打印,一个请求的唯一标识,同时把这个requestId存起来,方便各个地方使用
String requestId =Constant.REQUEST_ID_STYLE+Utils.uuid().substring(0,15);
MDC.put("requestId",requestId);
AppContext.setRequestThreadId(requestId);
//改造request
HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper((HttpServletRequest) request);
HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper((HttpServletResponse ) response);
String uri = requestWrapper.getRequestURI();
String token =requestWrapper.getHeader("token");
String deviceId = requestWrapper.getHeader("deviceId");
String version= requestWrapper.getHeader("version");
if(StringUtils.inNotBlank(token)){
requestWrapper.addParameter("token",token);
}
if(StringUtils.inNotBlank(deviceId )){
requestWrapper.addParameter("deviceId ",deviceId );
}
f(StringUtils.inNotBlank(version)){
requestWrapper.addParameter("version",version);
}
chain.doFilter(requestWrapper,responseWrapper);
}