Bla*_*ack 4 java spring spring-mvc tomcat6 servlet-3.0
在我的Spring MVC应用程序(servlet 3.0)中,我在web.xml中定义了一个自定义错误处理程序:
<error-page>
<location>/error</location>
</error-page>
Run Code Online (Sandbox Code Playgroud)
映射到Controller:
@Controller
class CustomErrorController {
@RequestMapping("error")
public String customError(HttpServletRequest request, HttpServletResponse response, Model model) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于大多数错误,例如404错误.但是,我还定义了一个Interceptor,如果没有经过身份验证的用户,它会返回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;
}
Run Code Online (Sandbox Code Playgroud)
自定义错误处理程序没有捕获403响应- 浏览器没有响应,错误代码为403.
我认为这是因为我在拦截器中做错了 - 我应该如何更改拦截器中的代码以便正常的错误处理工作?
Wil*_*ing 12
更改response.setStatus到response.sendError
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return false;
}
Run Code Online (Sandbox Code Playgroud)
这实际上发出了一个错误(而不仅仅是声明它) - 并强制Tomcat使用中定义的错误位置 web.xml
如HttpServletResponse #setStatus(int)javadoc中所述
如果使用此方法[setStatus]设置错误代码,则不会触发容器的错误页面机制.如果出现错误并且调用者希望调用Web应用程序中定义的错误页面,则必须使用sendError(int,java.lang.String).
| 归档时间: |
|
| 查看次数: |
6294 次 |
| 最近记录: |