自定义Filter
spring boot中实现Filter有两种方式
1、利用@WebFilter注解实现
@WebFilter(urlPatterns = "*", filterName = "myFilter", initParams = { @WebInitParam(name = "name1", value = "wfs"), @WebInitParam(name =
"name2", value = "gqq") })
public class MyFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//todo 初始化
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
// todo 自定义操作
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
//销毁
}
@WebFilter常用属性
属性 | 类型 | 描述 |
---|---|---|
filterName | String | Filter名称 |
urlPatterns/value | String[] | 指定拦截的url |
servletNames | String[] | 指定拦截的servlet名称 |
initParams | WebInitParam[] | 初始化参数 |
displayName | String | 用于显示的Filter名称 |
asyncSupported | boolean | 是否支持异步 |
dispatcherTypes | DispatcherType[] | 指定Filter对哪种方式的请求进行过滤。支持的属性:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST;默认过滤所有方式的请求 |
注意:需要在启动类增加注解@ServletComponentScan来启用
使用此方法实现的Filter的执行顺序是按照过滤器类名称顺序执行,所以推荐第二种实现方式
2、使用java config来实现
@Configuration
public class WebMvcConfiguration {
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter());
filterRegistrationBean.addInitParameter("name1", "123");
filterRegistrationBean.addInitParameter("name2", "hhh");
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/*");
}
}
推荐使用第二种方法实现,可以设置执行顺序