FIlterChain异常处理

时间:2016-03-02 04:42:05

标签: servlets exception-handling servlet-filters

我正在尝试了解涉及方法安全性和基于URL的安全性的Spring安全性。基于URL的安全性完全基于Servlet Filters。在某些情况下,Spring安全性会处理由过滤器链引发的异常以完成其工作。

我知道Servlet容器如何执行过滤器,但我对filterChain如何处理过滤器链中doFilter方法抛出的异常特别感兴趣。

2 个答案:

答案 0 :(得分:3)

  

我对filterChain如何处理过滤器链中doFilter方法引发的异常特别感兴趣。

它对他们没有任何作用。换句话说,它只是让他们去冒泡。它们最终将最终出现在servletcontainer的内置异常处理程序中,该处理程序已经知道如何根据<error-page>中的web.xml配置来处理它们。

然而,您可以通过FilterChain#doFilter()调用try-catch块来自行控制:

try {
    chain.doFilter(request, response) {
} catch (ServletException e) {
    Throwable cause = e.getRootCause(); 
    // ... (handle it)
}

如果链中的任何其他内容(filter,servlet,jsp等)抛出一个未捕获的异常,它将会在那里结束。

另见:

答案 1 :(得分:0)

除非您专门拦截HttpServletResponse流并调用诸如sendError之类的方法,否则我认为在尝试尝试/捕获doFilter方法时,您无法在HttpServletResponse流的errorMessage中返回有意义的任何内容。而且必须在调用doFilter之前完成。

  

我对filterChain如何处理异常特别感兴趣   在过滤器链中由doFilter方法抛出。

但是我有兴趣知道当filterChain中发生异常时如何将有意义的响应发送回流中。因为即使没有异常,如果已经在doFilter(?)之前调用了sendError之类的方法,那么您将如何处理成功响应?