일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 힙트리
- 완전이진트리
- JPA
- HTTP
- 자료구조
- 최소힙
- 강화학습
- JVM
- 엔티티 그래프
- 멀티프로세서
- 프로세스
- 백준 장학금
- 점근적 표기법
- AVL트리
- heapq
- jpa n+1 문제
- SpringSecurity
- 알고리즘
- 백준장학금
- MSA
- 이분탐색이란
- 연결리스트
- 연결리스트 종류
- spring
- 운영체제
- 스케줄링
- 최대 힙
- posix
- Kruskal
- python
- Today
- Total
목록백엔드/SpringSecurity (6)
KKanging

UsernamePasswordAuthenticationFilter란우리가 로그인을 시도할 때 Security에서 기본적으로 동작하는 Filter이다.Security에서 디폴트로 제공하고 만약 SecurityFilterChain을 커스텀한다면 제공해주지 않는다.즉, 우리가 주로 커스텀 해야하는 Filter라는 뜻이다.AuthenticationFilter 구조AuthenticationFilter의 기본 호출 구조이다.호출 순서는 다음과 같다AuthenticationFilter호출UsernamePasswordAuthenticationToken (비인증) 생성AuthenticationManager.authenticate(token) 호출구현체인 ProviderManager 호출ProviderManager 는 A..

CorsFilterCorsFilter는 서버의 Cors 공격을 막기 위한 Fitler이다. 같은 Origin 이 아닌 출처에 대한 요청을 막기위함이다.Cross-Origin이란?위와 같이 프로토콜 + hostname + port 중에 하나라도 다르면 Cross Origin 모두 같으면 동일한 Origin이라고 칭한다.옛날에는 서버 와 프론트 서버가 동일한 서버에 있는 경우가 많았으므로 위와 동일한 Origin 에 대한 요청만 허용하도록 해서 보안을 강화하였다.하지만 요즘에는 API 서버로 많이 사용하기 때문에 프론트 서버와 백엔드 서버가 다른 경우가 많다. 이런 경우에는 대부분 백엔드 서버에서 특정 Origin을 명시적으로 허용해줘야 한다.즉Origin : protocal + hostname + port..

SecurityContextFilter의 역할SecurityContextFilter은 세션 기반의 서버를 구현했을 때 사용자가 인증을 기반을 하는 요청을 보낼 때 세션 id에 해당하는 SecurityContext 를 가져오고 ContextHolder에 Load한다. 코드 뜯어보기SecurityContextHolderFilterGenericFilterBean을 상속 받고SecurityContetRepository 와 SecurityContextHolderStrategy 를 참조 한다.request에 이 FILTER를 거쳤다는 확인을 위해 값을 저장한다.securityContextRepository로 사용자가 보낸 세션 id에 해당하는 객체를 세션 DB에서 조회후 가져온다. Supplier은 지연된 로딩을 ..

SecurityFilterChain 의 Filter들은 어떻게 구현되어 있을까?기본 디폴트로 Security 에서 제공하는 Filter들의 상속도를 그려봤다. 위에 구조를 자세히 보면 제일 최상위 서블릿에서 제공하는 Filter 와 Filter를 상속받는 GenericFilterBean 그리고 GenericFilterBean를 상속 받는 OncePerRequestFilter 가 있는 것을 볼 수 있다. 위에 의존관계가 복잡해 보이지만 패턴이 보인다. SecurityFilterChain에 구현체인 Filter들은 모두 GenericFilterBean 또는 OncePerRequestFilter 를 상속 받음을 볼 수 있다. 그래서 우리가 기본 디폴트로 제공되는 Filter 말고 커스텀을 할려면 위에처럼 ..

Security에서 상태를 저장해야하는 이유SpringSecurity에서 구현된 핵심 로직은 SecurityFilterChain 의 Filter들을 거치면서 수행된다.현재 요청을 보낸 상태를 저장해야 다음 Filter들이 요청의 상태를 확인하여 로직을 수행한다.SecurityContextHolderSecurityContextHolder가 현재 요청을 보낸 사용자들의 상태를 관리한다. 그리고 SecurityContext에 해당하는 정보인 Authentication 객체를 담는다.Authentication 객체는 SecurityContext에 포함되어 관리되며 SecurityContext는 0개 이상 존재할 수 있다.그리고 이 N개의 SecurityContext는 하나의 SecurityContextHolde..

DelegatingFilterProxyDelegatingFilterProxy란? >> Spring Security 의존성을 추가하면 Security에서 제공하는 Security 기능을 지원하는 Filter인 DelegatingFilterProxy를 추가한다. 요청이 들어오면 DelegatingFilterProxy는 어떻게 filter를 실행시킬까? 스프링 Bean을 찾아 요청을 넘겨주는 서블릿 필터이다. 스프링 Bean으로 등록된 Filter를 찾고 실행을 시킨다. -> 이것이 FilterChainProxy DelegatingFilterProxy 코드 살펴보기public class DelegatingFilterProxy extends GenericFilterBean { ... @Nullable ..