为了支持自定义身份验证流程,最好是从OncePerRequestFilter或AbstractAuthenticationProcessingFilter扩展吗?

时间:2018-08-10 14:52:11

标签: spring spring-boot spring-security

如果我想为弹簧安全性支持新的/自定义授权方案,是否应该像OncePerRequestFilter那样从BasicAuthorizationFilter扩展?还是应该像AbstractAuthenticationProcessingFilter(和其他)一样从UsernamePasswordTokenFilter扩展?我想提出这种问题的另一种方式是,为什么BasicAuthorizationFilter不从AbstractAuthenticationProcessingFilter扩展出来?

1 个答案:

答案 0 :(得分:0)

如果要实现自定义身份验证方案,则应使用AbstractAuthenticationProcessingFilter。它提供了一种方法attemptAuthentication(HttpServletRequest request, HttpServletResponse response),可用于编写自定义身份验证逻辑。

Spring提供了继续进行不同类型身份验证方案的策略。因此,如下所示的身份验证过滤器:

  1. BasicAuthorizationFilter用于HTTP基本授权标头认证。
  2. AbstractAuthenticationProcessingFilter可以用于任何类型的自定义身份验证方案。所以我认为Spring已经提供BasicAuthorizationFilter只是为了不重新发明轮子。

例如-以下所有身份验证实现都是AbstractAuthenticationProcessingFilter的子类。

  • OAuth2ClientAuthenticationProcessingFilter(春季OAuth2)
  • ClientCredentialsTokenEndpointFilter(春季OAuth2)
  • UsernamePasswordAuthenticationFilter(Web登录身份验证)