filterChain.doFilter 没有移动到下一个过滤器
filterChain.doFilter is not moving to next filter
这是我的过滤器代码
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String path = ((HttpServletRequest) request).getRequestURI();
LOGGER.log(Level.INFO, "Current request path :: {0}", path);
if (ignorePath(path)) {
LOGGER.log(Level.INFO, "continuing to next filter");
chain.doFilter(request, response);
}
LOGGER.log(Level.INFO, "Should not come here");
}
记录只是为了调试目的。
我的执行日志低于此。
2020-07-18T12:02:30.805301+00:00 app[web.1]:2020 年 7 月 18 日 12:02:30 下午 security.filter.SecurityFilter doFilter
2020-07-18T12:02:30.805302+00:00 app[web.1]:信息:继续下一个过滤器
2020-07-18T12:02:30.889518+00:00 app[web.1]:2020 年 7 月 18 日 12:02:30 下午 security.filter.SecurityFilter doFilter
2020-07-18T12:02:30.889520+00:00 app[web.1]:信息:不应该出现在这里
这里到底出了什么问题?日志不应该出现在这里,不应该被打印(这是我所期望的)。
每次 request/response 通过链时都会调用 doFilter()
。 FilterChain.doFilter()
方法调用链中的下一个过滤器,如果该过滤器是链中的最后一个过滤器,则调用链末尾的资源。
这只是一个普通的方法,执行后控件会转到下一行。这就是您在 if
条件之后获取日志的原因。
如果您想忽略某些 URI 的下一个过滤器的执行,我建议您使用 else
块。
if (ignorePath(path)) {
chain.doFilter(request, response);
LOGGER.log(Level.INFO, "Called doFilter for this URI");
} else {
LOGGER.log(Level.INFO, "doFilter is not called for this URI");
}
这是我的过滤器代码
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String path = ((HttpServletRequest) request).getRequestURI();
LOGGER.log(Level.INFO, "Current request path :: {0}", path);
if (ignorePath(path)) {
LOGGER.log(Level.INFO, "continuing to next filter");
chain.doFilter(request, response);
}
LOGGER.log(Level.INFO, "Should not come here");
}
记录只是为了调试目的。 我的执行日志低于此。
2020-07-18T12:02:30.805301+00:00 app[web.1]:2020 年 7 月 18 日 12:02:30 下午 security.filter.SecurityFilter doFilter
2020-07-18T12:02:30.805302+00:00 app[web.1]:信息:继续下一个过滤器
2020-07-18T12:02:30.889518+00:00 app[web.1]:2020 年 7 月 18 日 12:02:30 下午 security.filter.SecurityFilter doFilter
2020-07-18T12:02:30.889520+00:00 app[web.1]:信息:不应该出现在这里
这里到底出了什么问题?日志不应该出现在这里,不应该被打印(这是我所期望的)。
每次 request/response 通过链时都会调用 doFilter()
。 FilterChain.doFilter()
方法调用链中的下一个过滤器,如果该过滤器是链中的最后一个过滤器,则调用链末尾的资源。
这只是一个普通的方法,执行后控件会转到下一行。这就是您在 if
条件之后获取日志的原因。
如果您想忽略某些 URI 的下一个过滤器的执行,我建议您使用 else
块。
if (ignorePath(path)) {
chain.doFilter(request, response);
LOGGER.log(Level.INFO, "Called doFilter for this URI");
} else {
LOGGER.log(Level.INFO, "doFilter is not called for this URI");
}