springboot使用Filter过滤器有两种方式:
一种是实现Filter接口然后通过@Component注解向项目加入过滤器
另一种是通过配置类来配置过滤器
@Component public class DemoFilter implements Filter { /** * 初始化 * @param filterConfig * @throws ServletException */ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("filter init"); } /** * 处理逻辑 * * 过滤器只能拿到请求和响应 至于是请求哪个控制器,哪个方法,filter是不知道的 * * 如果需要知道请求的是哪个控制器和哪个方法的时候就需要用到拦截器了 * * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("filter start"); filterChain.doFilter(servletRequest,servletResponse); System.out.println("filter finish"); } /** * 销毁方法 */ @Override public void destroy() { System.out.println("filter destroy"); } }
另一种的实现需要把@Component注解去掉然后添加一个配置类WebConfig
/** * 通过配置类设置过滤器 */ @Configuration public class WebConfig { /** * 和直接使用@Component注解进行过滤不一样的是它可以指定过滤的url * @return */ @Bean public FilterRegistrationBean demoFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); DemoFilter filter = new DemoFilter(); registrationBean.setFilter(filter); List<String> urls = new ArrayList<>();
//对所有的url进行过滤 urls.add("/*");
registrationBean.setUrlPatterns(urls); return registrationBean; } }