2013-06-14 5 views
5

में किसी अन्य उपयोगकर्ता के सत्र को नष्ट करें मेरे आवेदन में, मेरे पास एक व्यवस्थापक है जो उपयोगकर्ताओं को हटा सकता है। इसलिए जब मैं व्यवस्थापक सत्र से उपयोगकर्ता को हटाता हूं, तो मैं चाहता हूं कि हटाए गए उपयोगकर्ता को स्वचालित रूप से लॉग आउट होना चाहिए। मैं उपयोगकर्ता के सत्र आईडी को जानता हूं जिसे मैं हटाता हूं लेकिन मुझे नहीं पता कि सत्र आईडी का उपयोग करके सत्र को कैसे अमान्य करना है।वसंत

मुझे कुछ पसंद है: अवैध (सत्र आईडी);

क्या यह किसी भी तरह से संभव है? मुझे लगता है कि फ़िल्टर का उपयोग करना संभव है और प्रत्येक अनुरोध पर डेटाबेस की जांच कर रहा है, लेकिन क्या कोई अन्य तरीका है जहां मुझे हर httprequest पर डीबी की जांच करने की आवश्यकता नहीं है?

धन्यवाद। : डी

उत्तर

3

मुझे लगता है कि मुझे SessionRegistry कक्षा के साथ स्प्रिंग सुरक्षा आधारभूत संरचना का उपयोग करके समाधान दिखाई देता है।

आप web.xml में HttpSessionEventPublisher रजिस्टर करने के लिए है:

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

अपने स्प्रिंग config में, SessionRegistry घोषणा करते हैं।

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

अपने प्रशासन कंसोल में, आप SessionRegistry उपयोग करने के लिए उपयोगकर्ता की SessionInformation निकालते हैं और expireNow कॉल करनी होगी। उपयोगकर्ता के अगले अनुरोध पर, एक सर्वलेट फ़िल्टर को HttpSession की समाप्ति करनी चाहिए। SessionInformation के जावाडोक के बारे में कुछ स्पष्टीकरण है कि यह कैसे काम करता है।

हमें बताएं कि क्या इससे मदद मिलती है।

+0

मुझे समस्याएं आ रही हैं, मैंने सत्र कॉलिंग * sessionRegistry.registerNewSession (स्ट्रिंग सत्र, ऑब्जेक्ट प्रिंसिपल) पंजीकृत किया है * जब मैं उपयोगकर्ता को हटाता हूं, तो मुझे सत्र सही तरीके से मिलता है और मैं नियंत्रक में * sessionInformation.expireSession() * को कॉल करता हूं लेकिन यह काम नहीं किया। उपयोगकर्ता का सत्र यह अभी भी काम कर रहा है – Josema

+1

मैंने [डॉक्स] (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/session-mgmt.html) फिर से पढ़ा है, और मुझे लगता है कि आपको अपनी स्प्रिंग सुरक्षा कॉन्फ़िगरेशन के ' 'अनुभाग में' 'भी जोड़ना होगा। मुझे उम्मीद है इससे मदद मिलेगी। – 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
क्या @LaurentG द्वारा सुझाव दिया गया है, तो निम्न जरूरतों अपने वसंत कॉन्फ़िग फ़ाइल में जोड़े जाने के लिए साथ-साथ

:

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

यह काम करने के लिए। सत्र डेटा तक पहुंचने के लिए @zygimantus उत्तर का भी उपयोग किया जा सकता है।