我正在尝试了解涉及方法安全性和基于 URL 的安全性的 Spring 安全性。基于 URL 的安全性完全基于 Servlet Filters
。在某些情况下,Spring 安全性会处理过滤器链抛出的异常以完成其工作。
我知道 Servlet 容器如何执行过滤器,但我对 filterChain
如何处理过滤器链中的 doFilter
方法抛出的异常特别感兴趣。
最佳答案
I am particularly interested in how
filterChain
handle exceptions thrown bydoFilter
method in filter chain.
它对他们没有任何作用。换句话说,它只是让它们冒泡。它们最终会出现在 servletcontainer 的内置异常处理程序中,该处理程序已经知道如何根据 <error-page>
处理它们。 web.xml
中的配置.
但是您可以通过放置 FilterChain#doFilter()
来自己控制它调用try-catch
像这样阻止:
try {
chain.doFilter(request, response) {
} catch (ServletException e) {
Throwable cause = e.getRootCause();
// ... (handle it)
}
如果链下的任何其他东西(过滤器、servlet、jsp 等)抛出未捕获的异常,它将在那里结束。
另见:
关于servlets - FILterChain异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35738662/