我在运行的 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)
有更好的方法吗?
您这样做的方式对于类覆盖应该没问题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)
| 归档时间: |
|
| 查看次数: |
1760 次 |
| 最近记录: |