Spring MVC Interceptor错误响应结果在空白页面

时间:2015-07-17 14:32:55

标签: spring-mvc http-error

在我的春季MVC应用程序(3.1.4版本,Servlet 2.5)中, 从HandlerInterceptorAdapter触发时,我无法显示自定义403错误页面。

我的web.xml:

<error-page>
    <error-code>404</error-code>
    <location>/404</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/403</location>
</error-page>

我的错误控制器:

@Controller
public class HTTPErrorController {

 @RequestMapping(value="403")
 public ModelAndView error403(){     
     return new ModelAndView("/errors/403");
 }

 @RequestMapping(value="404")
 public ModelAndView error404(){     
     return new ModelAndView("/errors/404");
 }
}

我的处理程序拦截器:

public class CSRFHandlerInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

    // Validate CSRF token on POST request only.        
    if (request.getMethod().equalsIgnoreCase("post")) {
        if (!CSRFTokenManager.verifyCSRFToken(request)) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN, "Bad or missing CSRF value");
            return false;
        }
    }
    return true;
}

当发送sendError时,我在firefox和Ie中有一个空白页面。 404例外工作正常,但无法弄清楚如何让403显示我的自定义错误页面。

Firefox截图: http://hpics.li/8b6ab9f

Httpfox截图: http://hpics.li/b032ca0

**我正在使用apache-tomcat-7.0.42

谢谢

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。

对于我的情况,我发现这是因为我的错误页面做了response.forward而不是再次转到拦截器。 (无限循环)

即,您可以尝试将/ error / 403页面简化为明文:“这是403”。