如何应用基于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/"); } }