#spring-boot #spring-security #spring-security-oauth2
Вопрос:
Просматривая документацию, я нашел только одну рекомендацию:
Defaultauth2authorizedclientmanager предназначен для использования в контексте запроса HttpServletRequest. При работе вне контекста HttpServletRequest вместо этого используйте AuthorizedClientServiceOAuth2AuthorizedClientManager.
Я мог бы проверить, что WebClient
вызовы зависают, используя DefaultOAuth2AuthorizedClientManager
вне области запроса сервлета, однако ничего странного не происходит, если я использую AuthorizedClientServiceOAuth2AuthorizedClientManager
внутри контекста запроса сервлета. Тогда в чем же разница между ними двумя?
Ответ №1:
Основное отличие, как вы отметили в документах, заключается в том, где они будут использоваться. Это может быть менее очевидно со стороны, но будет более очевидно внутри структуры. Но, возможно, более простой способ объяснить, почему они отличаются, — это посмотреть, что они заключают в себе.
DefaultOAuth2AuthorizedClientManager
используетOAuth2AuthorizedClientRepository
- который имеет сигнатуру метода
loadAuthorizedClient(String clientRegistrationId, Authentication principal, HttpServletRequest request)
- который имеет сигнатуру метода
AuthorizedClientServiceOAuth2AuthorizedClientManager
используетOAuth2AuthorizedClientService
- который имеет сигнатуру метода
loadAuthorizedClient(String clientRegistrationId, String principalName)
- который имеет сигнатуру метода
Так DefaultOAuth2AuthorizedClientManager
что, я думаю, вы бы назвали «на основе запросов» и AuthorizedClientServiceOAuth2AuthorizedClientManager
«на основе услуг», что на самом деле означает все остальное.
Документы API будут полезны здесь:
- defaultauth2authorizedclientmanager по умолчанию
- авторизованныйclientservicereactiveoauth2авторизованныйclientmanager
Обновить:
Какова была бы дополнительная ценность использования запроса в качестве параметра?
В качестве интерфейса объявление о том, что loadAuthorizedClient
метод принимает запрос в качестве параметра, означает, что любая будущая реализация может использовать запрос, чтобы повлиять на его решение. Реализация по умолчанию ( DefaultOAuth2AuthorizedClientManager
) делает это, так HttpSessionOAuth2AuthorizedClientRepository
как использует запрос на доступ к сеансу.
Комментарии:
1. Спасибо за объяснение, Стив, но я все еще не уверен, что понимаю разницу. Какова была бы дополнительная ценность использования запроса в качестве параметра?
2. В качестве интерфейса объявление о том, что
loadAuthorizedClient
метод принимает запрос в качестве параметра, означает, что любая будущая реализация может использовать запрос, чтобы повлиять на его решение. Реализация по умолчанию делает это, такHttpSessionOAuth2AuthorizedClientRepository
как использует запрос на доступ к сеансу.