Java Tomcat自定义错误处理程序未捕获Spring MVC侦听器错误响应

Java Tomcat自定义错误处理程序未捕获Spring MVC侦听器错误响应,java,spring,spring-mvc,tomcat6,servlet-3.0,Java,Spring,Spring Mvc,Tomcat6,Servlet 3.0,在我的Spring MVC应用程序(servlet 3.0)中,我在web.xml中定义了一个自定义错误处理程序: <error-page> <location>/error</location> </error-page> 这适用于大多数错误,例如404错误。 但是,我还定义了一个拦截器,如果没有经过身份验证的用户,它将返回403响应: @Override public boolean preHandle(HttpServletRequ

在我的Spring MVC应用程序(servlet 3.0)中,我在web.xml中定义了一个自定义错误处理程序:

<error-page>
    <location>/error</location>
</error-page>
这适用于大多数错误,例如404错误。 但是,我还定义了一个拦截器,如果没有经过身份验证的用户,它将返回403响应:

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HttpSession httpSession = request.getSession();
    ((HttpServletResponse) response).setStatus(HttpURLConnection.HTTP_FORBIDDEN);
    return false;
}
403响应没有被自定义错误处理程序捕获-浏览器没有收到错误代码为403的响应

我想这是因为我在拦截器中做了一些不正确的事情-
如何更改拦截器中的代码,以便正常的错误处理工作?

response.setStatus
更改为
response.sendError

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    response.sendError(HttpServletResponse.SC_FORBIDDEN);
    return false;
}
这实际上发出了一个错误(而不仅仅是声明错误),并迫使Tomcat使用
web.xml

如合同中所述

如果使用此方法[setStatus]设置错误代码,则不会触发容器的错误页面机制。如果出现错误并且调用方希望调用web应用程序中定义的错误页面,则必须改用sendError(int,java.lang.String)


如何将错误代码附加到错误页?
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    response.sendError(HttpServletResponse.SC_FORBIDDEN);
    return false;
}