OAuth2.0學習(4-1)Spring Security OAuth2.0 - 代碼分析
1、org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter
org.springframework.security.oauth2.client.filter.OAuth2ClientAuthenticationProcessingFilter
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter 登錄驗證(用戶名密碼驗證)
1.1、org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter
1.2、org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter
1.3、org.springframework.security.oauth2.client.filter.OAuth2ClientAuthenticationProcessingFilter
1.4、UsernamePasswordAuthenticationFilter
父類AbstractAuthenticationProcessingFilter中有一個AuthenticationManager接口屬性,驗證工作主要是通過這個AuthenticationManager接口的實例來完成的。
在默認情況下,springSecurity框架會把org.springframework.security.authentication.ProviderManager類的實例註入到該屬性。
UsernamePasswordAuthenticationFilter的驗證過程如下:
1. 首先過濾器會調用自身的attemptAuthentication方法,從request中取出authentication, authentication是在org.springframework.security.web.context.SecurityContextPersistenceFilter
2. 拿到authentication對象後,過濾器會調用ProviderManager類的authenticate方法,並傳入該對象
3.ProviderManager類的authenticate方法再調用自身的doAuthentication方法,在doAuthentication方法中會調用類中的List<AuthenticationProvider> providers集合中的各個AuthenticationProvider接口實現類中的authenticate(Authentication authentication)方法進行驗證,由此可見,真正的驗證邏輯是由各個各個AuthenticationProvider接口實現類來完成的,DaoAuthenticationProvider類是默認情況下註入的一個AuthenticationProvider接口實現類
4.AuthenticationProvider接口通過UserDetailsService來獲取用戶信息
OAuth2.0學習(4-1)Spring Security OAuth2.0 - 代碼分析