2012-11-20 42 views
5

Yay güvenliği kullanarak bir web uygulaması geliştirdim. Giriş için LDAP'den erişim alır. Şimdi bahar güvenliğini kullanarak oturumu yönetmek istiyorum, authentication.getName() kullanarak görebiliyorum username alıyorum ve ayrıca sessionID alabilirsiniz.Spring Security kullanarak Oturum Yönetimi: Eşzamanlı oturumlar

Şimdi aynı kullanıcının başka bir tarayıcı kullanarak aynı sistemden giriş yapmaya çalışıp çalışmadığını kontrol etmek istiyorum. Zaten hesabında oturum açtığını belirten bir mesaj alması gerekiyor.

Bunu nasıl başaracağınıza dair bir fikir verebilir mi ????

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

bunu kullanmaktan ve bana aşağıdaki hatayı veriyor diğer bazı tarayıcı kullanarak giriş deneyin:

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

cevap

6

ben eksik olabilir şey, ama gelecek yapılandırma denedim ve gibi çalışır beklenen:

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

ben başka bir tarayıcıdan aynı kullanıcı ile oturum açmaya, bu /login.jsp beni alır ve gösterir Hata mesajı: Maximum sessions of 1 for this principal exceeded

DÜZENLEME: Ayrıca önerdiğiniz gibi fsame yapılandırmasına sahip senin web.xml

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

bu yerleştirmek gerekir. Artı JdbcTokenRepositoryImpl. Tüm bunlarla birlikte bir tarayıcı ile giriş yapıyorum; ve sonra tekrar başka biriyle giriş yaparım. İkincisi giriş yapmış gibi görünüyor ve gerçekten de. Sorunum, ilk tarayıcıdan aşağıdaki bağlantıyı aldığım bir bağlantı var: 'Estado HTTP 500 - PreparedStatementCallback; kötü SQL dilbilgisi [persistent_logins dosyasından siliniz, username =?]; [blah blah]: 'gbt.persistent_logins' tablosu mevcut değil. Ve tablo aslında DB'den kayboldu! Neler olup bittiği hakkında bir fikriniz var mı? – kazbeel

İlgili konular