Spring Security

[Security] 세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter

cornarong 2021. 12. 9. 20:54

세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter

 

1. SessionManagementFilter의 핵심적인 4가지 기능

1-1. 세션 관리 : 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리

1-2. 동시적 세션 제어 : 동일 계정으로 접속이 허용되는 최대 세션수를 제한

1-3. 세션 고정 보호 : 인증할 때 마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지

1-4. 세션 생성 정책 : Always, If_Required, Never, Stateless

 

2. ConcurrentSessionFilter의 기능

  • 매 요청 마다 현재 사용자의 세션 만료 여부 체크
  • 세션이 만료되었을 경우 즉시 만료 처리
  • session.isExpired() == true ( : 세션 만료되었습니까? == 참)
    • 로그아웃 처리
    • 즉시 오류 페이지 응답, "This session has been expired"

 

* 위의 두개의 필터가 연계하여 처리하는 경우

예) 최대 세션 허용개수가 초과  -> SessionManagementFilter에서 이전 사용자 세션 만료 처리

-> ConcurrentSessionFilter가 매 요청마다 세션 만료 여부 체크 

 

정리하면

SessionManagementFilterConcurrentSessionFilter는 서로 연계하여 1-2.동시적 세션 제어 처리를 합니다.


아래의 그림에서 user1과 user2를 예시로 세션 처리 과정의 전반적인 흐름을 그림으로 살펴보겠습니다.

왼쪽의 상단에서 아래로 user1 -> user2 -> user1  순서대로 로그인 및 Get호출을 할 경우 세션이 처리되는 과정을 간략하게 글로 설명해보면 아래와 같습니다.

  •  user1 로그인
    • -> ConcurrentSessionControlAuthenticationStrategy에서 세션 허용 개수 확인
    • -> ChangeSessionIdAuthenticationStrategy에서 세션 고정 보호 기능 처리
    • -> RegisterSessionAuthenticationStrategy에서 세션 정보 등록
    • -> 인증 성공
  • user2 로그인
    • -> ConcurrentSessionControlAuthenticationStrategy에서 세션 허용 개수 확인 -> 허용 개수 초과 발생!
    • 1번 전략
      • 인증 실패 전략 -> SessionAuthenticationException 예외 발생
      • -> 인증 실패
    • 2번 전략 : 이떄 SessionManagementFilterConcurrentSessionFilter가 연계해서 처리하게 됩니다.
      • 세션 만료 전략 -> session.expireNow()기존 사용자 세션 만료
      • -> 위에 동일 하게 user2의 세션 고정 보호 기능 처리 및 세션 정보 등록
      • -> 인증 성공
  • user1 Get호출 (세션 만료 전략으로 인해 user1 사용자의 세션은 만료 상태)
    • -> session. isExpired() == true -> 세션 만료
    • -> 로그인 실패 (This session has been expired)

 

 


 

 

스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의

초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과

www.inflearn.com