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

Ste*_*ven 7 spring spring-security spring-boot

如果我想支持 spring-security 的新/自定义授权方案,我应该OncePerRequestFilter像这样扩展BasicAuthorizationFilter吗?或者我应该从AbstractAuthenticationProcessingFilterUsernamePasswordTokenFilter(和其他人)那样延伸?我想问这个问题的另一种方式是为什么不BasicAuthorizationFilter延伸自AbstractAuthenticationProcessingFilter

小智 6

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

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

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

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

  • OAuth2ClientAuthenticationProcessingFilter(Spring OAuth2)
  • ClientCredentialsTokenEndpointFilter(Spring OAuth2)
  • UsernamePasswordAuthenticationFilter(Web登录认证)