2012-11-20 21 views
5

Ho sviluppato un'applicazione Web utilizzando la sicurezza Spring. Per il login ottiene l'accesso da LDAP. Ora voglio gestire la sessione usando la stessa sicurezza di primavera, posso vedere usando authentication.getName() Sto ottenendo il username e posso anche ottenere il sessionID.Gestione sessione utilizzando Spring Security: sessioni simultanee

Ora voglio assicurarmi che se lo stesso utente sta tentando di accedere dallo stesso sistema usando un altro browser, dovrebbe ricevere un messaggio che dice che è già registrato nel suo account.

Qualcuno può dare un'idea di come ottenere questo ????

<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> 

Quando uso questo e cercare di effettuare il login utilizzando un altro browser mi dà il seguente errore:

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

risposta

6

io possa mancare qualcosa, ma ho provato la configurazione successiva e funziona come prevede:

<!-- 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> 

Quando provo ad accedere con lo stesso utente da un altro browser, mi ci vuole per /login.jsp e mostra la messaggio di errore: Maximum sessions of 1 for this principal exceeded

EDIT: è anche necessario inserire questo nel vostro web.xml

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

ho la configurazione fsame come lei suggerisce. Plus JdbcTokenRepositoryImpl. Con tutto questo, accedo con un browser; e poi accedo di nuovo con un altro. Sembra che il secondo sia loggato, ed è davvero così. Il mio problema è, ho clik un collegamento dal primo browser ottengo la seguente eccezione: 'Estado HTTP 500 - PreparedStatementCallback; cattiva grammatica SQL [cancella da persistent_logins dove username =?]; [blah blah]: la tabella "gbt.persistent_logins" non esiste. E il tavolo è in realtà scomparso dal DB !!! Qualcuno ha un'idea di cosa sta succedendo? – kazbeel

Problemi correlati