본문 바로가기

SpringSecurity

SpringSecurity(세션제어 Filter)

반응형

인증 API - SessionManagememtFilter

 

1.세션관리

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

2.동시적 세션 제어

  • 동일 계정으로 접속이 허용되는 최대 세션수를 제한

3. 세션 고정보호

  • 인증 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지

4.세션 정책

  • Always,if_required,Never,Stateless

인증 API - ConcurrentSessionFilter

 

  • 매 요청 마다 현재 사용자의 세션 만료 체크 여부
  • 세션이 만료되었을 경우 즉시 만료 처리
  • Session.isExpired() == true // 로그아웃 처리 // 즉시 오류 페이지 응답

인증 API - ConcurrentSessionFilter,SessionManagememtFilter

SessionManagementFilter, ConcurrentSessionFilter 두개가 동시적 세션 제어를 처리하게 된다

1.첫번째로 이전 사용자의 세션을 만료 시키는 전략을 먼저 수행한다

 

사용자가 로그인을 시도 현재  이미 동일한 계정으로 누군가가 인증을 시도 하고 세션이 생성된 상태 그러면 현재 세션이 개인 상태

최대 세션 허용갯수가 한개라고 가정한다면 이전 사용자 세선을 만료 하게 된다

2.세션을 만료 시킬건지 여부를SessionManagementFilter를 통해서 확인한후에 수행한다

 

 매요청 마다 사용자의 세션만료 여부를 체크 한다 그러면 여부를 어디서 참조 하냐면 SessionManagementFilter안에서 이전 사용자의 세션을 만료 되도록 설정 했던 것을 참조하여 세션을 만료 시킨다(로그아웃) 오류 페이지로 응답을 해버린다

 

 

 

UsernamePassword AuthenticationFilter(인증처리하는필터)

인증을 처리를 하게 되면 가장먼저 ConcurrentSessionControlAuthenticationStrategy 이클래스를 먼저 호출한다

이클래스는 동시적 세션 제어를 하는 클래스이다 현재 인증을 시도 하고 있는 세션의 count를 확인한다

처음으로 사용자가 계정을가지고 로그인을 시도 했다면 0일것이다. 그리고 최대 세션갯수를 1개라고 가정을 한다고 하면

이게정은 정상으로 인증을 받을것이다.

 

두번째는ChangeSessionId AuthenticationStrategy 세션 고정보호 하는 클래스이다 

session.changeSessionId() 가 기본이기 때문에 새롭게 세션을 생성하고 쿠키를 만들어주는 처리를 하는 클래스이다.

 

세번째가 RegisterSessionAuthenticationStrategy 사용자의 세션을 등록하고 저장하는 클래스이다

이클래스가 처리가 되면 그다음에 사용자의 세션이 저장된다. 그러면 session count는 1이 될것이다

 

 

유저2(현재사용자) 가 동일한 계정으로 접속을 시도 한다면 이미 session count가 1이다 위에서 말했듯이 최대 세션갯수는 1개라고 가정을 했다

그렇기 때문에  예외가 발생한다 (인증실패전략) 두번째 세번째 클래스를 호출하지 않는다 

 

 

session count가 1이다 하지만 인증이 성공하게 되는데 이전 사용자의 세션을 만료 처리 해버리기 때문에 가능하다 

그리고 인증에 성공하게되면 각 클래스들을 호출하여 세션을 생성하고 쿠키를 만들어 준다 (세션만료전략)

 

 

유저1(이전사용자) 이전사용자가 서버자원으로 접근하게되면 ConcurrentSessionFilter가 세션만료 여부를 체크하게 되는데 그 만료 여부를 session.expireNow(); , Session.isExpired(true)이다  현재 위에 유저2가 세션만료 전략을 통해서 유저1의 세션을 만료 한적이 있다. 그래서 이미 사용자1의 세션이 만료되었기 때문에 ConcurrentSessionFilter는 즉시 사용자1의 세션을 만료 처리하고 오류 메세지를 호출한다

반응형