springSecurityLoginProcess
๋ก๊ทธ์ธ ํ๋ก์ธ์ค
@FunctionalInterface์ธOAuth2UserService์ loaduser ๋ฉ์๋๋ฅผCustomOAuth2UserService์์ ๊ตฌํํ๋ฉดOAuth2LoginAuthenticationProvider์์ ์ด loaduser๋ฅผ ํธ์ถํ๋ค. ์๋๋OAuth2LoginAuthenticationProvider์ authenticate ๋ฉ์๋์ ๋ก์ง ์ค ์ผ๋ถ์ด๋ค.
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
OAuth2User oauth2User = this.userService.loadUser(new OAuth2UserRequest(loginAuthenticationToken.getClientRegistration(), accessToken, additionalParameters));
return authenticationResult;
}b. loadUser์์ ๋ฆฌํดํ๋ OAuth2User๋ principal์ด ๋ ๊ฒ์ด๊ธฐ์ ์ค์ํ๋ค. principal์ ํ์ฌ ์ ์ ํ
์ด๋ธ์ ๋ง๊ฒ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด OAuth2User ์ธํฐํ์ด์ค๋ง ์์ํด์ ํ์ฌ ํ
์ด๋ธ์ ๋ง๊ฒ ๊ตฌํํ๋ฉด ๋๋ค.
c. `OAuth2LoginAuthenticationProvider` ์ authenticate ๋ฉ์๋๋ `ProviderManager`์ authenticate๋ฉ์๋์์ ํธ์ถํ๋ค.
d. `ProviderManager`์ authenticate ๋ฉ์๋๋ `OAuth2LoginAuthenticationFilter` ์์ ํธ์ถํ๋ค.
```xml
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
OAuth2LoginAuthenticationToken authenticationResult = (OAuth2LoginAuthenticationToken)this.getAuthenticationManager().authenticate(authenticationRequest);
}
```
๋ฆฌํด๋ `Authentication` ๊ฐ์ฒด๋ฅผ `OAuth2LoginAuthenticationToken` ๋ก ๋ค์ด์บ์คํ
ํ๋ค.
e. ์์์`OAuth2LoginAuthenticationFilter` ์ `attemptAuthentication` ๋ฉ์๋์์ `AuthenticationManager`๋ฅผ ๊ฐ์ ธ์์ `authenticate`๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์ด `attemptAuthentication` ๋ `AbstractAuthenticationProcessingFilter` ์ `doFilter` ๋ฉ์๋์์ ํธ์ถํ๋ค.
```xml
private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
Authentication authenticationResult = this.attemptAuthentication(request, response);
}
```
f. ์ด `AbstractAuthenticationProcessingFilter` ๋ `FilterChainProxy` ์์ ํธ์ถ๋๋ค.
g. ๊ทธ ๋ค์์ `FilterChainProxy` ๋ ๋ค์ ํํฐ์ธ `OAuth2AuthorizationRequestRedirectFilter`๋ฅผ ํธ์ถํ๋ค.
h. ๊ทธ ๋ค์์ `OncePerRequestFilter` ์ด๋ค.
j. ์ด์ ๋ณ์๋ณ ํํฐ๋ฅผ ๋ค ๊ฑฐ์น๋ค.delegatingfilterproxy์์filterchainproxy๋ฅผ ํธ์ถํ๊ณ , filterchainproxy๋ 20๊ฐ ์ํ์ ํํฐ๋ฅผ ์์ฑ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๊ณVirtualFilterChain์ ์์ฑํด์nextFilter.doFilter(request, response, VirtualFilterChain);์ฒ๋ผVirtualFilterChain์์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ ๋ค์์ ์ด๋ค ํํฐ๋ฅผ ํธ์ถํด์ผ ํ๋์ง 20๊ฐ ์ํ์ ํํฐ๊ฐ ์์์ ๋ค์ ํํฐ๋ฅผ ํธ์ถํ๊ฒ ํ๋ค. ์ฌ๊ธฐ์์nextFilter๋filterchainproxy๊ฐ ๊ฐ์ง 20๊ฐ ์ํ์ ์์๋ฅผ ๊ฐ์ง ํํฐ๊ฐ ๋๋ค. ์๋ฅผ ๋ค์ด,AbstractAuthenticationProcessingFilter์ ํํฐ ๋์์ด ๋๋๋ฉด ์ ๋ฌ ๋ฐ์FilterChain chain์ผ๋กchain.doFilter์ ํธ์ถํ๋ค. ์ฌ๊ธฐ์FilterChain์ ์ธํฐํ์ด์ค์ด๊ณ , ๊ตฌํ์ฒด๋กVirtualFilterChain์ ์ฌ์ฉํ๋ค.chain.doFilter๊ฐ ํธ์ถ๋๋ฉดVirtualFilterChain์ doFilter๊ฐ ๋์ํ๊ฒ ๋๋ค.๋ชจ๋ ํธ์ถ์ด ๋๋๋ฉด
filterchainproxy๋SecurityContextHolder์์cleatContext()๋ก ์ค๋ ๋์ ์ธ์ ์ ์ง์ด๋ค.AbstractAuthenticationProcessingFilter๋ ์ธ์ฆ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด,successfulAuthentication๋ฉ์๋๋ฅผ ํธ์ถํดSecurityContextHolder.setContext(context);๋ก ์ธ์ ์ ์ค์ ํ๋ค.
Last updated