首页 > 解决方案 > 要支持自定义身份验证流程,最好从 OncePerRequestFilter 或 AbstractAuthenticationProcessingFilter 扩展?

问题描述

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

标签: springspring-bootspring-security

解决方案


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

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

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

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

  • OAuth2ClientAuthenticationProcessingFilter(春季 OAuth2)
  • ClientCredentialsTokenEndpointFilter(春季 OAuth2)
  • UsernamePasswordAuthenticationFilter(网页登录认证)

推荐阅读