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

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值