2013-06-14 19 views
5

Uygulamamda, kullanıcıları silebilen bir yöneticim var. Böylece bir kullanıcıyı yönetici oturumundan sildiğimde, silinen kullanıcının otomatik olarak çıkış yapmasını istiyorum. Kullanıcının oturum kimliğini sildiğimi biliyorum ancak oturum kimliğini kullanarak oturumu nasıl geçersiz edeceğimi bilmiyorum.İlkbaharda başka bir kullanıcının oturumunu yok edin

Şunlar gibi bir şey isterim: invalidate (SessionId);

Bu herhangi bir şekilde mümkün mü? Ben bir filtre kullanarak ve her istekte veritabanını kontrol etmek mümkün olduğunu düşünüyorum ama her httprequest üzerinde db kontrol etmek gerek yok başka bir yolu var mı?

Teşekkürler. : D

cevap

3

SessionRegistry sınıfı ile Spring Security altyapısını kullanarak bir çözüm görüyorum.

Sen web.xml yılında HttpSessionEventPublisher kayıt vardır:

sizin Bahar konfigürasyonunda
<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 

, SessionRegistry beyan ederim. senin yönetim konsolunda

<bean id="sessionRegistry" 
    class="org.springframework.security.core.session.SessionRegistryImpl" /> 

, sen kullanıcının SessionInformation almak ve expireNow aramaya SessionRegistry kullanmak zorunda. Kullanıcının bir sonraki isteğinde, bir sunucu filtresi HttpSession'ın süresinin dolmasını sağlamalıdır. SessionInformation'un javadoc'unun nasıl çalıştığı hakkında bazı açıklamaları vardır.

Bize yardım ederse bize bildirin. , @LaurentG önerdiği bahar yapılandırma dosyasında eklenecek ihtiyaçlarını takip edilmiştir ne ile birlikte

+0

Sorun yaşıyorum, oturum kaydını kaydettim * sessionRegistry.registerNewSession (Dize oturumu, Nesne sorumlusu) * kullanıcıyı sildiğimde, oturumu doğru şekilde alırım ve denetleyicide * sessionInformation.expireSession() * işlevini çağırırım. işe yaramadı. Kullanıcının oturumu hala çalışıyor – Josema

+1

Tekrar [docs] (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/session-mgmt.html) okuyun ve Ayrıca, Spring güvenlik yapılandırmanızın '' bölümüne '' seçeneğini de eklemelisiniz. Umarım yardımcı olur. – LaurentG

3
// to end a session of a user: 
List<SessionInformation> sessions = sessionRegistryImpl.getAllSessions(user, false); 
sessionRegistryImpl.getSessionInformation(sessions.get(0).getSessionId()).expireNow(); 

// note: you can get all users and their corresponding session Ids: 
List<Object> users = sessionRegistryImpl.getAllPrincipals(); 
List<String> sessionIds = new ArrayList<>(users.size()); 

for (Object user: users) { 
    List<SessionInformation> sessions = sessionRegistryImpl.getAllSessions(user, false); 
    sessionIds.add(sessions.get(0).getSessionId()); 
} 
0

:

<session-management> 
    <concurrency-control session-registry-alias="sessionRegistry" /> 
</session-management> 

işe yaraması için. Ayrıca oturum verisine erişmek için @zygimantus cevabı kullanılabilir.

İlgili konular