在我的春季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
谢谢
答案 0 :(得分:0)
我遇到了类似的问题。
对于我的情况,我发现这是因为我的错误页面做了response.forward而不是再次转到拦截器。 (无限循环)
即,您可以尝试将/ error / 403页面简化为明文:“这是403”。