1. 程式人生 > >OAuth2.0學習(4-1)Spring Security OAuth2.0 - 代碼分析

OAuth2.0學習(4-1)Spring Security OAuth2.0 - 代碼分析

endpoint manager authent work cor tro 過程 pro efi

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

過濾器中通過捕獲用戶提交的登錄表單中的內容生成的一個org.springframework.security.core.Authentication接口實例.

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 - 代碼分析