본문 바로가기

SpringSecurity

SpringSecurity(동시 세션 제어)

반응형

동시 세션제어는 동일한 계정으로 인증 받을때 생성되는 세션의 허용갯수가 초과하지 않고 유지하는것을 말한다 S

pringSecurity는 두가지의 전략으로 동시적 세션을 제어할수 있도록 제공하고 있다.

 

최대 세션허용갯수를 초과했다고 가정하자

첫번째 경우는 이전 사용자의 세션을 만료 시키는 전략!

 

현재 서버에서는 최대 사용할수 있는 세션의 갯수를 1개라고 가정해보자

사용자1과 사용자2의 세션이 2개 이므로 초과 되었다. 이럴때 이전사용자1 의 세션을 만료 시키는 설정을 하게 된다.

현재 세션은 2개지만 첫번째(사용자1)의 세션은 이미 만료되게 처리 한것이다. 그러면 현재 세션은 사용자2의 세션은 살아 있고 

이전 사용자1의 세션은 만료되어 폐기 한다 그러면 현재 남아 있는 세션은 1개 이므로 최대 허용갯수 조건이 맞다 이게

동시세션 제어의 첫번째 전략이다!

 

두번째는 현재 사용자의 인증을 실패하게 하는 전략이다.

 

사용자 1이 로그인을하고 서버에서 세션이 생성된다. 현재 서버에는 사용자1의 세션이 저장되어 있다.

여기서 사용자 2가 동일한 계정으로 로그인을 시도한다면 예외 처리가 발생한다 이유는 이미 사용자1이

로그인이 되어 있고 서버에서 인증을 받아 세션이 생성된 상태이기 때문이다. 그러면 사용자2는 인증이 실패되고 세션이 생성되지 못하도록

한다 즉 로그인을 하지 못하도록 처리한다 

 

 

 

자 그러면 코드를 통해서 한번 확인해보자!

 

1 .maximumSessions(1)                 // 최대 허용 가능 세션 , -1 : 무제한 로그인 세션 허용 // 

2 .maxSessionsPreventsLogin(true)  // 동시 로그인 차단함, defult = false // 2번째 전략에 해당한다 

// 기존 세션 만료(default) // 1번째 전략!

.invalidSessionUrl("/invalid")       // 세션이 유효하지 않을 이동 페이지

.expiredUrl("/expired ")          // 세션이 만료된 경우 이동 페이지

 

그러면 필자는 확인을 하기위 서버 구동을 해보겠다.!

크롬과 사파리를 동시에 두개를 시도했고 필자는 설정할때 최대 세션을 1개로 설정햇기 때문에 예외처리가 될것이다.

그러면 이값을 false로 변경 해보겠다.

현재 동일한 계정으로 세선이 2개가 생성된걸 확인할수 있다 하지만 두번째 사용자가 동일한 계정으로 로그인을 시도하면서

 

첫번째 사용자의 세션은 만료 처리를 해주고 응답을 바로 해준다.

 

반응형