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

}

以下是一个简单的Spring Boot XSS过滤器的代码实现: 1. 创建一个名为XSSFilter的Java类,并实现javax.servlet.Filter接口。 ```java @Component public class XSSFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response); } // ... } ``` 2. 创建一个名为XSSRequestWrapper的Java类,该类继承HttpServletRequestWrapper类,并覆盖getParameter()方法以过滤请求参数的HTML和JavaScript代码。 ```java public class XSSRequestWrapper extends HttpServletRequestWrapper { public XSSRequestWrapper(HttpServletRequest request) { super(request); } @Override public String[] getParameterValues(String parameter) { String[] values = super.getParameterValues(parameter); if (values == null) { return null; } int count = values.length; String[] encodedValues = new String[count]; for (int i = 0; i < count; i++) { encodedValues[i] = cleanXSS(values[i]); } return encodedValues; } @Override public String getParameter(String parameter) { String value = super.getParameter(parameter); return cleanXSS(value); } private String cleanXSS(String value) { // 过滤掉HTML和JavaScript代码 return Jsoup.clean(value, Whitelist.basic()); } } ``` 在上面的示例,使用了Jsoup库的clean方法来过滤HTML和JavaScript代码,并使用Whitelist.basic()方法配置了基本的白名单。 3. 将过滤器注册到Spring Boot应用程序,并将其应用于需要防止XSS攻击的URL路径。 ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private XSSFilter xssFilter; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(xssFilter).addPathPatterns("/secure/*"); } } ``` 在上面的示例,XSS过滤器被应用于/secure/*路径下的所有请求。您可以根据需要更改路径。 这是一个简单的XSS过滤器的实现,您可以根据自己的需求进行扩展和定制化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值