And Brain said,

Spring의 문지기 | Security : Filter 본문

IT/Java & Kotlin & Spring boot

Spring의 문지기 | Security : Filter

The Man 2022. 11. 7. 21:18
반응형

 

Spring Security

 

인증, 권한 부여 및 기타 보안 기능을 제공하는 프레임워크

‘인증’과 ‘권한’에 대한 부분을 Filter 흐름에 따라 처리한다.

Filter는 Http 요청과 응답을 전처리 후처리한다.

 

기본적으로 Filter는 서블릿 컨테이너지만 스프링 부트에선 톰캣과 같은 서블릿 컨테이너까지 제어가 가능하여

스프링 부트가 서블릿 필터의 구현체 빈을 찾으면 DelegatingFilterProxy 없이 바로 FilterChain에 Filter를 등록해준다.

 

 

FilterChain

 

Filter는 FilterChain 안에 있을 때만 동작한다.

 

FilterChain은 단일 Http 요청을 처리하는 여러 개의 Filter들이 사슬처럼 연결되어 연쇄적으로 동작한다.

 

 

 

 

10단계로 알아보는 Filter 처리 과정

 

1. 사용자가 로그인을 하여 인증을 요청한다.

 

2. AuthenticationFilter가 그 요청을 가로채고, 가로챈 정보를 통해 UsernamePasswordAuthenticationToken의 인증 용 객체를 생성한다.

3. AuthenticationManager의 구현체인 ProviderManager에게 생성한 UsernamePasswordToken 객체를 전달한다.

4. UsernamePasswordAuthenticationToken이 ProviderManager에 도착한다면  ProviderManager는 자신이 갖고 있는 AuthenticationProvider(s)의 목록을 순회하면서 인증을 요구한다.

5. DB에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보를 넘겨준다.

6.넘겨받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만든다.

7. AuthenticationProvider(들)은 UserDetails를 넘겨받으며 ProviderManager의 인증 요구에 True or False를 리턴해준다.

8. ProviderManager는 True를 리턴해주는 AuthenticationProvider에게 authenticate() 메서드를 실행하여 인증하고 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환한다.

9. 다시 최초의 AuthenticationFilter에 Authentication 객체가 반환된다.

10. Authentication 객체를 SecurityContext에 저장한다.

 

 

SecurityContext

 

SecurityContext는 접근 주체와 인증에 대한 정보를 담고 있는 Context이다. 접근 주체인 Authentication 을 담고 있다

Authentication은 Principal을 가지는 객체다.

Principal은 액세스토큰값 등의 인증정보를 담는 객체이다.

 

 

 

Thanks for watching, Have a nice day.

 

반응형
Comments