Если я хочу поддерживать новую / настраиваемую схему авторизации для Spring-Security, должен ли я расширяться с OncePerRequestFilter
, как это делает BasicAuthorizationFilter
? Или мне следует расширяться от AbstractAuthenticationProcessingFilter
, как это делают UsernamePasswordTokenFilter
(и другие)? Я полагаю, что этот вопрос можно задать по-другому: почему BasicAuthorizationFilter
не является наследником AbstractAuthenticationProcessingFilter
?
Если вы хотите реализовать собственную схему аутентификации, вам следует использовать AbstractAuthenticationProcessingFilter
. Он предоставляет метод attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
, который можно использовать для написания пользовательской логики аутентификации.
Spring предоставил стратегии для использования различных типов схем аутентификации. Итак, следующие фильтры аутентификации:
BasicAuthorizationFilter
для аутентификации заголовка HTTP Basic Authorization.AbstractAuthenticationProcessingFilter
его можно использовать для любого типа пользовательской схемы аутентификации. Так что я думаю, что Spring уже предоставил BasicAuthorizationFilter
, просто чтобы не изобретать велосипед.Например - все следующие реализации аутентификации являются подклассами AbstractAuthenticationProcessingFilter
.
OAuth2ClientAuthenticationProcessingFilter
(Spring OAuth2)ClientCredentialsTokenEndpointFilter
(Spring OAuth2)UsernamePasswordAuthenticationFilter
(аутентификация через Интернет)