2012-11-20 3 views
5

스프링 보안을 사용하여 웹 애플리케이션을 개발했습니다. 로그인의 경우 LDAP에서 액세스 권한을 얻습니다. 이제 스프링 보안 그 자체를 사용하여 세션을 관리하고 싶습니다. authentication.getName()을 사용하여 볼 수 있습니다. username을 받고 있는데 sessionID을 얻을 수도 있습니다.스프링 보안을 이용한 세션 관리 : 동시 세션

이제 동일한 사용자가 다른 브라우저를 사용하여 동일한 시스템에서 로그인을 시도하면 해당 사용자가 이미 자신의 계정에 로그인했다는 메시지를 받아야합니다.

누구나 아이디어를 줄 수 있습니까?

<security:session-management 
     invalid-session-url="/login.jsp?error=sessionExpired" 
     session-authentication-error-url="/login.jsp?error=alreadyLogin"> 
    <security:concurrency-control 
       max-sessions="1" 
       expired-url="/login.jsp?error=sessionExpiredDuplicateLogin" 
       error-if-maximum-exceeded="false" /> 
</security:session-management> 

내가 이것을 사용하고 나에게 다음과 같은 오류주는 다른 브라우저 사용하여 로그인을 시도 :

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: Cannot call sendError() after the response has been committed 
enter code here 

답변

6

내가 누락 될 수 있습니다 뭔가를하지만, 나는 다음 구성을 시도하고로 작동 예상 :

<!-- more configuration stuff --> 

<sec:form-login login-page="/login.jsp" 
    default-target-url="/defaultTarget.jsp" 
    authentication-failure-url="/login.jsp?error=true" 
    login-processing-url="/login" always-use-default-target="true" /> 

<sec:session-management> 
    <sec:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> 
</sec:session-management> 

내가 다른 브라우저에서 동일한 사용자로 로그인을 시도, 그것은 /login.jsp 나에게 가져와을 보여줍니다 오류 메시지 : Maximum sessions of 1 for this principal exceeded

편집 : 당신은 또한 당신이 제안대로 내가 fsame 구성이 당신의 web.xml

<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 
+0

이를 배치해야합니다. 플러스 JdbcTokenRepositoryImpl. 이 모든 것을 통해 하나의 브라우저로 로그인합니다. 그런 다음 다른 사람과 다시 로그인합니다. 두 번째 계정이 로그인되어있는 것 같습니다. 제 문제는, 저는 첫 번째 브라우저에서 링크를 클릭하면 다음 예외가 발생합니다. 'Estado HTTP 500 - PreparedStatementCallback; 나쁜 SQL 문법 [persistent_logins에서 삭제 어디 username =?]; [blah blah] : 'gbt.persistent_logins'테이블이 존재하지 않습니다. ' 그리고 테이블은 실제로 DB에서 dissapeared! 누구에게 무슨 일이 일어나고 있는지 아이디어가 있습니까? – kazbeel