Spring Security/security

Spring security - 4. 중복 로그인 로그아웃 시키기

Ssemi-Column 2023. 11. 17. 15:28
728x90

Spring security는 session을 관리 할 수 있어서, 같은 사용자가 들어왔을 때 기존에 로그인한 session 또는 마지막에 로그인한 session을 선택해서 로그아웃을 시킬 수 있다고 한다.


* 코드 작성

 

  • httpSecurity에 sessionManagement 설정을 넣어주어야 한다.
  • sessionFixation에서 chageSessionId 설정을 하는데, 동일한 아이디로 계속 로그인을 해도 SessionId가 변경이 안된다고 하는 것 같다. SessionId가 변경이 안되고 고정되면 xss공격으로 SessionId를 탈취 할 수 있다고 한다. 그래서 cahgeSessionId설정을 통해 중복 로그인시 SessionId를 변경한다.

  • maximunSessions를 통해 Session의 최대 갯수를 설정한다
  • expiredSessionStrategy를 설정하여 session이 만료되면 어떻게 할 것인지 정 할 수 있다. 나는 다른 작업없이 로그인 화면으로 이동만 시키면 되니까 redirect설정만 했다.
  • sessionLogoutStrategy
  • maxSessionsPreventsLogin의 boolean 값으로 첫 session을 삭제하거나 마지막 session을 삭제할 수 있다고 한다. 나는 첫 session을 삭제시키기 위해 false로 설정
  • sessionRegistry를 bean으로 등록하여 하나의 Registry에 session정보를 저장 하도록 한다.

* 코드 실행

chrome 로그인화면
chrome 로그인 성공
edge 로그인화면
둘다 로그인이 성공했다. 이 상황에서 edge를 새로고침 하면
아무 이상이 없음, chrome을 새로고침하면?

 

로그아웃이 풀리게 된다

 


SecurityConfiguration

저기를 들어가보니 

SessionManagementConfigurer

1장에서 본 ConcurrentSessionFilter와 관련이 있어보인다.

해당 Filter는 중복 로그인에 관련된 Filter인데 내가 만든 설정을 저기안에 넣고 중복로그인시 실행시키도록 하는 것 같다.

 

전부 SessionManagementConfigurer안에 있는거 보니, 이 클레스가 Session관리에 관한 총 책임자를 맡고있는 듯하다.

728x90
반응형
LIST