springboot的@webFilter设置urlPatterns无效
钢翼
编程
过滤器是springboot常用的框架处理利器。
但是当过滤器多起来的时候,用@Bean注入明显不够优雅。
直接在注解上写是不是更美观呢。
1.过滤器上注解添加@WebFilter,并且不要添加@Component和@Configuration等注解,否则他们注入顺序会比@WebFilter先,导致urlPatterns不起效。
@WebFilter(urlPatterns = "/api/**")
@Order(-101)
public class MyFilter implements Filter {
.......
}
2.在启动类上添加@ServletComponentScan
@ServletComponentScan
@SpringBootApplication
public class Application {
......
}
3.过滤器的拦截顺序可以通过@Order控制。
如果你的框架集成了spring security,并且通过spring security添加了鉴权用的过滤器。
当你想让你自定义的过滤器执行优先级更高,你不得不设置@Order小于-100.
重要!以上方法最终还是被我废弃了,当有些过滤器是@WebFilter有些是@Component时,会导致@WebFilter过滤器整个不起效。
我最后还是使用@Component的方式添加过滤器,并且在方法内判断url来实现urlPatterns
@Component
@Order(-101)
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
AntPathMatcher matcher = new AntPathMatcher();
if (!matcher.match("/api/**", request.getRequestURI())) {
//不匹配则不拦截
chain.doFilter(req, res);
return;
}
......
}
}