1.方式一:
1.1 自定义filter类实现Filter接口,重写do Filter方法,在该类上增加@webFilter注解,指明过滤路径urlPatterns,这里支持正则
@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest, servletResponse);
}
1.2 启动类增加@servletComponentScan注解进行扫描
2.方式二:
2.1 自定义Filter实现Filter接口,不加任何注解
public class UserFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest,servletResponse);
}
}
2.2 编写单独的config类来向spring boot注册该filter
@Configuration
public class UserFilterConfig {
@Bean
public UserFilter userFilter(){
return new UserFilter();
}
@Bean(name = "userFilterConf")
public FilterRegistrationBean userFilterConfig(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(userFilter());
filterRegistrationBean.addUrlPatterns("/cart/*");
filterRegistrationBean.addUrlPatterns("/order/*");
filterRegistrationBean.setName("userFilterConfig");
return filterRegistrationBean;
}
}
总结:这两种方法在spring boot体系中都比较常见,当过滤逻辑较为简单时使用第一种即可,当过滤逻辑较为复杂,或项目中需要配置多个filter处理不同的过滤逻辑,可以单独设置一个config包来按照第二种方法编写单独的config来进行配置。