前言
SpringBoot整合XssFilter,Jsoup等实现请求参数的过滤,处理Xss攻击及sql注入,以下是涉及的主要类:
原理过程
Springboot中会使用FilterRegistrationBean来注册Filter,Filter是Servlet规范里面的,属于容器范围,Springboot中没有web.xml,那Springboot中,不用管Filter是如何交给Servlet容器,只见FilterRegistrationBean的如下继承图,即可知道。(现在框架很多,各个都要穷究底层,可能时间不允许?可能项目不允许?……只要熟悉了,慢慢就会知道“Filter是如何交给Servlet容器”的潜规则)
实现原理及执行顺序
大致原理:有的方法可能同时需要多个filter依次对其进行过滤,这时候便需要对filter的执行进行优先级的排序。如下:
1、新建一个配置文件WEBConfig.java,
2、先生成一个过滤器的bean,
3、再把过滤器的bean注入到FilterRegistrationBean中,并设置一些属性,过滤的url,执行的顺序之类的(order的数值越小,优先级越高)即可。
具体实现:
1、在springboot 中,依赖FilterRegistrationBean 这个类,实现Filter【javax.servlet.Filter】接口,实现Filter方法
2、添加 @Configuration 注解,将自定义Filter加入过滤链
WebConfig.java
package com.AAAAAAAAAAAA.common.config;
import com.AAAAAAAAAAAA.common.interceptor.XSRFHandlerInterceptor;
import com.AAAAAAAAAAAA.common.xss.XssFilter;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
@Configuration
@SuppressWarnings("unchecked")
public class WebConfig {
/**
* XssFilter Bean
*/
@Bean
public FilterRegistrationBean xssFilterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new XssFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.setEnabled(true);
filterRegistrationBean.addUrlPatterns("/*");
Map<String, String> initParameters = new HashMap<>();
initParameters.put("excludes", "/favicon.ico,/img/*,/js/*,/css/*");
initParameters.put("isIncludeRichText", "true");
filterRegistrationBean.setInitParameters(initParameters);
return filterRegistrationBean;
}
@Bean
public ObjectMapp