如何在springboot中添加条件过滤器

New*_*per 4 spring-boot

我在运行的 Spring Boot 应用程序中有不同的过滤器。我想根据条件跳过一个过滤器来运行少数 api。我可以通过在 doFilterInternal 中添加条件来做到这一点。这里是过滤器的代码:


class ConditionalFilter extends OncePerRequestFilter {
  @Override
  protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
    HttpServletRequest httpRequest = (HttpServletRequest)servletRequest;
    HttpServletResponse httpResponse = (HttpServletResponse)servletResponse;
    if (!condition) {
        filterChain.doFilter(request, httpResponse);
    } else {
        someFilterLogic();
    }
  }
}

Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

dee*_*han 5

您这样做的方式对于类覆盖应该没问题Filter。但由于您使用的是 OncePerRequestFilter,您可以重写该方法,shouldNotFilter如下所示:

class ConditionalFilter extends OncePerRequestFilter {
  @Override
  protected void doFilterInternal(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
    someFilterLogic();
  }

  @Override
  protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
    return condition; // replace with whatever condition you like
  }
}
Run Code Online (Sandbox Code Playgroud)