SessionManagementFilter, ConcurrentSessionFilter

SessionManagementFilter

 

세션에 관리작업에 관련된 업무를 수행하는 Filter

  • 세션 관리
    • 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리
  • 동시적 세션 제어
    • 동일 계정으로 접속이 허용되는 최대 세션수를 제한
  • 세션 고정 보호
    • 일증 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지
  • 세션 생성 정책
    • Always, If_Require, Never, Stateless 
 

동시 세션 제어

동시 세션 제어 현재 동일한 계정으로 인증 받을 때 생성되는 허용된 세션의 갯수가 초과가 되었을 때, 지속적으로 세션을 유지하는 제어 방법 세션을 제한 하는 방법으로는 총 두가지가 존재함

jamesblog95.tistory.com


ConcurrentSessionFilter

 

  • 매 요청 마다 현재 사용자의 세션 만료 여부 체크 
  • 세션이 만료되었을 경우 즉시 만료 처리

 


SessionManagementFilter, ConcurrentSessionFilter

 

  1. 현재 사용자가 Server에 접근.
  2. SessionManagementFilter가 현재 사용자에게 세션을 발급.
  3. 이전 사용자가 Server에 접근.
  4. ConcurrentSessionFilter가 이전 사용자의 세션이 만료가 되었는지 확인.
  5. 만료가 된 것이면 Logout을 시킴. 

  1. user1 로그인하면 UsernamePasswordAuthenticationFilter 가 ConcurrentSessionControlAuthenticationStrategy클래스를 호출함. (지금 생성한 유저의 세션의 수를 확인함.)
  2. ChangeSessionedAuthentivationStrategy 클래스가 새로운 세션과 쿠키를 생성함. 
  3. RegisterSessionAuthenticationStrategy 클래스가 세션과 쿠키를 등록하고 저장함.

인증 실패 전략인 경우

  1. user2 로그인하면  ConcurrentSessionControlAuthenticationStrategy클래스가 세션 생성가능한 수와 현재 세션의 수가 같기 때문에 SessionAuthenticationException을 보냄. 

세션 만료 전략인 경우

  1. user2 로그인시 기존에 있던 user1의 세션을 만료(session.expireNow) 시키고 user2 세션을 생성. 
  2. user2 인증을 성공시킴.
  3. 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