Spring-Security-文档笔记之异常处理

1. ExceptionTranslationFilter

处理过滤器中抛出的任何AccessDeniedExceptionAuthenticationException. 它提供了Java异常和HTTP响应之间的桥梁。

image.png

  1. 调用chain.doFilter(req, res)来继续调用程序后续部分.

  2. 如果用户未认证或接收到AuthenticationException. 那么开始进行身份认证. 此时会做以下工作:

    • 清除SecurityContextHolder

    • HttpServletRequest存储到RequestCache. 当用户认证成功后, RequestCache用来恢复原始请求.

    • 通过AuthenticationEntryPoint向客户端请求身份认证.

  3. 如果接收到的是AccessDeniedException, 首先判断当前用户是否是一个匿名用户,如果是, 则调用AuthenticationEntryPoint. 否则则调用AccessDeniedHandler(默认为AccessDeniedHandlerImpl),访问将被拒绝.

如果接收到的不是以上两种异常, ExceptionTranslationFilter将不会做任何处理. 其处理伪代码:

try {
    filterChain.doFilter(request, response); 
} catch (AccessDeniedException | AuthenticationException ex) {
    if (!authenticated || ex instanceof AuthenticationException) {
        startAuthentication(); 
    } else {
        accessDenied(); 
    }
}

2. 使用注意

使用这个示filter, 必须配置以下属性:

  • authenticationEntryPoint
  • requestCache: 默认为HttpSessionRequestCache.

3. 类图

image.png

你可能感兴趣的:(Spring-Security-文档笔记之异常处理)