springboot中的过滤器Filter和FilterRegistrationBean以及把request改造成HttpServletRequestWrapper

拈花ヽ惹草 提交于 2019-12-07 16:17:43

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);

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!