| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- 백엔드공부
- 스프링부트
- spring boot
- Java
- ORM
- 서버
- 개발자
- 컴퓨터 공학
- actuator
- QueryDSL
- SpringSecurity
- 자료구조
- 백준
- 연관관계
- SpringBoot
- 핵심가이드
- queue
- LinkedList
- 컴퓨터 구조
- spring
- 제로베이스
- error
- 백엔드스쿨
- JWT
- 백엔드
- array
- restTemplate
- JPA
- TestCode
Archives
- Today
- Total
be_better
[Springboot] Spring Security 필터 동작 본문
목차
보안 필터체인 종류 및 순서
보안필터 체인에서 사용하는 필터에는 여러 종류가 있다.
공식 문서에서 소개하는 필터의 실행 순서
- ChannelProcessingFilter
- WebAsyncManagerIntergrationFilter
- SecurityContextPersistenceFilter
- HeaderWriterFilter
- CorsFilter
- CsrfFilter
- LogoutFilter
- OAuth2AuthorizationRequestRedirectFilter
- Saml2WebSsoAuthenticationRequestFilter
- X509AuthenticationFilter
- AbstractPreAuthenticationedProcessingFilter
- CasAuthenticationFilter
- OAuth2LoginAuthenticationFilter
- Saml2WebSsoAuthenticationFilter
- Saml2WebSsoAuthenticationFilter
- UsernamePasswordAuthenticationFilter
- OpenIDAuthenticationFilter
- DefaultLoginPageGeneratingFilter
- DefaultLogoutPageGeneratingFilter
- ConcurrentSessionFilter
- DigestAuthenticationFilter
- BearerTokenAuthenticationFilter
- BasicAuthenticationFilter
- RequestCacheAwareFilter
- SecurityContextHolderAwareRequestFilter
- JaasApiIntegrationFilter
- RememberMeAuthenticationFilter
- AnonymousAuthenticationFilter
- SessionManagementFilter
- ExceptionTraslationFilter
- FilterSecurityInterceptor
- SwitchUserFilter
보안 필터체인 설정
보안 필터체인은 WebSecurityConfigurerAdapter 클래스를 상속받아 설정 가능
필터체인 프록시는 WebSecurityConfigurerAdapter 클래스를 상속받는 클래스를 여러개 생성하면 여러개의 보안 필터체인을 가질 수 있다.
WebSecurityConfigurerAdapter의 @Order 어노테이션으로 필터 순서를 정의할 수 있다.
별다른 설정이 없다면 UsernamePasswordAuthenticationFilter를 통해 인증 처리
UsernamePasswordAuthenticationFilter를 통한 인증 과정

인증 수행 과정
- 클라이언트로부터 요청 -> 서블릿 필터에서 SecurityFilterChain 으로 작업 위임, 그중 UsernamePasswordAuthenticationFilter (위 그림에서 AuthenticationFilter에 해당) 에서 인증 처리
- AuthenticationFilter는 요청 객체 (HttpServletRequest) 에서 username 과 password 를 추출해서 토큰 생성 후 AuthenticationManager에게 토큰 전달.
- AuthenticationManager는 인터페이스, 일반적인 구현체는 ProviderManager
- ProviderManager는 인증을 위해 AuthenticationProvider로 토큰 전달
- AuthenticationProvider는 토큰의 정보를 UserDetailsService에 전달
- UserDetailsService는 전달받은 정보를 통해 데이터베이스에서 일치하는 사용자를 찾아 UserDetails 객체 생성
- 생성된 UserDetails 객체는 AuthenticationProvider로 전달, 해당 Provider에서 인증 수행 -> 성공하면 ProviderManager로 권한을 담은 토큰 전달
- ProviderManager는 검증된 토큰을 AuthenticationFilter로 전달
- AuthenticationFilter는 검증된 토큰을 SecurityContextHolder에 있는 SecurityContext에 저장
UsernamePasswordAuthenticationFilter는 접근 권한을 확인.
인증 실패인 경우 로그인 폼이라는 화면을 띄우는 역할 수행
또는 JWT 토큰을 사용해 인증을 수행할 경우
JWT 관련 필터 생성후 UsernamePasswordAuthenticationFilter 앞에 배치해 먼저 인증 수행하도록 설정
[Springboot] 서비스의 인증과 권한 부여 - JWT
JWT(JSON Web Token) JWT 특징 당사자 간의 정보를 JSON 형태로 안전하게 전송하기 위한 토큰. URL로 이용할 수 있는 문자열로만 구성되어 있으며, 디지털 서명이 적용되어 있어 신뢰 가능. 주로 서버와의
jnjeaaaat.tistory.com
'Springboot > 이론' 카테고리의 다른 글
| [Springboot] 서비스와 인증과 권한 부여 - 스프링 시큐리티와 JWT 적용 (0) | 2023.12.07 |
|---|---|
| [Springboot] 서비스의 인증과 권한 부여 - JWT (1) | 2023.12.06 |
| [Springboot] 서비스의 인증과 권한 부여 - SpringSecurity 소개 (0) | 2023.12.06 |
| [Springboot] 서버 간 통신 - WebClient (0) | 2023.11.29 |
| [Springboot] 서버 간 통신 - RestTemplate 사용해보기 (0) | 2023.11.29 |