如果我想为弹簧安全性支持新的/自定义授权方案,是否应该像OncePerRequestFilter
那样从BasicAuthorizationFilter
扩展?还是应该像AbstractAuthenticationProcessingFilter
(和其他)一样从UsernamePasswordTokenFilter
扩展?我想提出这种问题的另一种方式是,为什么BasicAuthorizationFilter
不从AbstractAuthenticationProcessingFilter
扩展出来?
答案 0 :(得分:0)
如果要实现自定义身份验证方案,则应使用AbstractAuthenticationProcessingFilter
。它提供了一种方法attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
,可用于编写自定义身份验证逻辑。
Spring提供了继续进行不同类型身份验证方案的策略。因此,如下所示的身份验证过滤器:
BasicAuthorizationFilter
用于HTTP基本授权标头认证。 AbstractAuthenticationProcessingFilter
可以用于任何类型的自定义身份验证方案。所以我认为Spring已经提供BasicAuthorizationFilter
只是为了不重新发明轮子。例如-以下所有身份验证实现都是AbstractAuthenticationProcessingFilter
的子类。
OAuth2ClientAuthenticationProcessingFilter
(春季OAuth2)ClientCredentialsTokenEndpointFilter
(春季OAuth2)UsernamePasswordAuthenticationFilter
(Web登录身份验证)