SessionManagementFilter
세션에 관리작업에 관련된 업무를 수행하는 Filter
- 세션 관리
- 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리
- 동시적 세션 제어
- 동일 계정으로 접속이 허용되는 최대 세션수를 제한
- 세션 고정 보호
- 일증 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지
- 세션 생성 정책
- Always, If_Require, Never, Stateless
ConcurrentSessionFilter
- 매 요청 마다 현재 사용자의 세션 만료 여부 체크
- 세션이 만료되었을 경우 즉시 만료 처리
SessionManagementFilter, ConcurrentSessionFilter
- 현재 사용자가 Server에 접근.
- SessionManagementFilter가 현재 사용자에게 세션을 발급.
- 이전 사용자가 Server에 접근.
- ConcurrentSessionFilter가 이전 사용자의 세션이 만료가 되었는지 확인.
- 만료가 된 것이면 Logout을 시킴.
- user1 로그인하면 UsernamePasswordAuthenticationFilter 가 ConcurrentSessionControlAuthenticationStrategy클래스를 호출함. (지금 생성한 유저의 세션의 수를 확인함.)
- ChangeSessionedAuthentivationStrategy 클래스가 새로운 세션과 쿠키를 생성함.
- RegisterSessionAuthenticationStrategy 클래스가 세션과 쿠키를 등록하고 저장함.
인증 실패 전략인 경우
- user2 로그인하면 ConcurrentSessionControlAuthenticationStrategy클래스가 세션 생성가능한 수와 현재 세션의 수가 같기 때문에 SessionAuthenticationException을 보냄.
세션 만료 전략인 경우
- user2 로그인시 기존에 있던 user1의 세션을 만료(session.expireNow) 시키고 user2 세션을 생성.
- user2 인증을 성공시킴.
- user1 이 로그인시 인증된 session이 없으니 logout시킴
'Backend > Security' 카테고리의 다른 글
ExceptionTranslationFilter (0) | 2023.01.09 |
---|---|
권한 설정 및 표현식 (0) | 2023.01.09 |
동시 세션 제어 (0) | 2023.01.03 |
AnonymousAuthenticationFilter (0) | 2023.01.03 |
Remember Me 인증 (0) | 2023.01.03 |