好的 - 我最近在工作中使用 Java 过滤器做一些工作,在 Web 应用程序之间移动时我们经常需要回收代码;我们可以让过滤器查看一个相对位置,以便它们可以在多个上下文中使用,但我们仍然会经历很多。所以,我创建了一个超类来帮助代码生成;我还在超类中添加了 runFilter 方法作为抽象方法,只是为了使其与标准 doFilter 分开。超类代码如下所示:
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
try {
runFilter(req,resp,chain);
}
catch (Exception e) {
getLogger().error("Error! Exception:",e);
}
}
现在,问题来了:每当扩展上述代码的过滤器触发时,我都会收到像我在上面的记录器中设置的错误,但我也从子类的 runFilter 内部获取记录器消息,表明它正在完成它的工作 - 转发甚至工作正常。我查看我的控制台,它显示子类正在访问过滤器链的行上发生的错误。
if (isExcluded(debugURI)) {
chain.doFilter(request, response);
return;
} else if (request.getSession().getAttribute("USER") == null) {
getLogger().info("Session with ID " + serialVersionUID + " has timed out. Redirecting to " + getRedirectTarget() + ".");
response.sendRedirect(getRedirectTarget());
chain.doFilter(request, response);
return;
}
else {
chain.doFilter(request, response);
return;
}
FilterChain 是否也需要更新(或扩展)才能接收 runFilter 的调用?任何帮助都会非常有用。