如何应用基于URL模式的spring bootfilter?

我创建了一个spring bootfilter – 使用@Component注释实现GenericFilterBean

 @Component public class MyAuthenticationFilter extends GenericFilterBean { ... @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { ... } } 

该filter由Spring Boot Framework自动识别,适用于所有REST API。 我希望此filter仅适用于某个URL路径,例如/api/secure/*但我找不到正确的方法。 我试过@WebFilter但它没有用。 我没有使用XML配置或servlet初始化程序 – 只是注释。

让它运作的正确方法是什么?

您可以添加如下filter:

 @Bean public FilterRegistrationBean someFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(someFilter()); registration.addUrlPatterns("/url/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("someFilter"); registration.setOrder(1); return registration; } @Bean(name = "someFilter") public Filter someFilter() { return new SomeFilter(); } 

如果您能够扩展OncePerRequestFilter还有另一种选择。 例如:

 public class SomeFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // your filter logic .... } @Override protected boolean shouldNotFilter(HttpServletRequest request) { String path = request.getServletPath(); return !path.startsWith("/api/secure/"); } }