spring security에서는 (내부 정책에 따라 다르겠지만)중복로그인 방지를 위한 방안을 마련해 두었다.
1.web.xml에 listener등록 (이 부분은 지정을 해야한다는 예제가 많았는데 테스트 해보니 3.1.0.RELEASE 에서는 등록 하지 않아도 상관이 없었다 자세한 내막은 나도 모름)
<listener> <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> </listener>
2.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" : 중복 로그인이 일어났을 경우 이동 할 주소
(이때 중복 로그인이 일어날 경우 처음 로그인한 사용자는 접속이 끊기고 다음 request시 expired-url에 지정한 주소로 이동된다. (invalid-session-url이 있을경우 invalid-session-url로 이동))
만약 두번째 인증을 거부하게 하고 싶은 경우
concurrency-control에 error-if-maximum-exceeded="true"속성을 지정하면 된다.
3.session-management의 속성에 session-fixation-protection이란 속성이 있는데
이 부분은 Session Fixation( 악성 사용자 가 사이트에 접속하여 세션 ID 를 획득 후 획득 한 세션 ID를 사용하여 다른 사용자가 사이트에 접속하도록 유도하여 다른 사용자가 해당 세션 ID로 사이트 접속시악성 사용자도 같은 세션으로 함께 로그인이 되는 방법 )을 이용한 악성 사용자를 막기 위해 security에서 매번 인증 요청시마다 session을 재생성 하는데 이를 제어하기 위한 속성이다.
migrateSession - 새 session 생성 후 기존의 session 값은 새 session에 복사해준다.(기본값)
none - 기존 session 유지
newSession - 새 session 생성 session은 복사하지 않음
이번 포스팅 부분은 자료가 많지 않아 정확한 내용은 모르겠다.