我正在尝试了解涉及方法安全性和基于URL的安全性的Spring安全性。基于URL的安全性完全基于Servlet Filters
。在某些情况下,Spring安全性会处理由过滤器链引发的异常以完成其工作。
我知道Servlet容器如何执行过滤器,但我对filterChain
如何处理过滤器链中doFilter
方法抛出的异常特别感兴趣。
答案 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之类的方法,那么您将如何处理成功响应?