• spring security에서는 (내부 정책에 따라 다르겠지만)중복로그인 방지를 위한 방안을 마련해 두었다.

  • web.xmllistener등록 (이 부분은 지정을 해야한다는 예제가 많았는데 테스트 해보니 3.1.0.RELEASE 에서는 등록 하지 않아도 상관이 없었다 자세한 내막은 나도 모름)

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>
  • security-context.xml에 세션 제한 지정 <http>
<session-management invalid-session-url="/user/loginPage">
 <concurrency-control max-sessions="1" expired-url="/user/loginPage"/>
</session-management>
  • invalid-session-url​ : 세션이 끊겼을때 이동 할 페이지
  • max-sessions="1" : 최대 허용 가능 세션 수​
  • expired-url="/user/loginPage" : 중복 로그인이 일어났을 경우 이동 할 주소​
  • (이때 중복 로그인이 일어날 경우 처음 로그인한 사용자는 접속이 끊기고 다음 requestexpired-url​에 지정한 주소로 이동된다. (invalid-session-url​이 있을경우 invalid-session-url​로 이동))

  • 만약 두번째 인증을 거부하게 하고 싶은 경우 concurrency-control에​ error-if-maximum-exceeded="true"속성을 지정하면 된다.​

  • session-management​의 속성에 session-fixation-protection이란 속성이 있는데 이 부분은 ​Session Fixation( 악성 사용자 가 사이트에 접속하여 세션 ID 를 획득 후 획득 한 세션 ID를 사용하여 다른 사용자가 사이트에 접속하도록 유도하여 다른 사용자가 해당 세션 ID로 사이트 접속시악성 사용자도 같은 세션으로 함께 로그인이 되는 방법​ )을 이용한 악성 사용자를 막기 위해 security에서 매번 인증 요청시마다 session을 재생성 하는데 이를 제어하기 위한 속성이다.

  • migrateSession : 새 session 생성 후 기존의 session 값은 새 session에 복사해준다.(기본값)
  • none : 기존 session 유지
  • newSession : 새 session​ 생성 session은 복사하지 않음

이번 포스팅 부분은 자료가 많지 않아 정확한 내용은 모르겠다.

소스확인 : https://github.com/ParkMinKyu/security