2013-10-23 3 views
7

में सत्र समाप्ति के लिए श्रोता वसंत सुरक्षा के लिए नया हूं और प्रमाणीकरण के लिए इसका उपयोग कर रहा हूं। मुझे एक समस्या का सामना करना पड़ रहा है कि जब ब्राउज़र बंद हो जाता है या किसी असामान्य विफलता के मामले में सत्र समाप्त हो जाता है लेकिन मैं ईवेंट को पकड़ने में असमर्थ हूं ताकि साफ़ कोड को निष्पादित किया जा सके। मैं इसके बारे में पता लगाता हूं और स्प्रिंग में HttpSessionEventPublisherHttpSessionDestroyedEventsessionDestroyed() विधि में कैप्चर करने के लिए पाया जाता है लेकिन जब मैं ब्राउज़र बंद करता हूं तो उसे कॉल नहीं किया जाता है।वसंत

इसके लिए समाधान का सुझाव देने का अनुरोध करें।

+0

मैंने एक समाधान जोड़ा .इस यह मदद करता है और मुझे बताता है। –

उत्तर

1

शायद SessionManagementFilter मदद कर सकता है?

या यदि आप टाइमआउट होने पर उपयोगकर्ता को स्वचालित रूप से रीडायरेक्ट करने के लिए स्प्रिंग सुरक्षा कॉन्फ़िगर कर सकते हैं: Detecting timeouts अनुभाग।

+0

सत्र प्रबंधन फ़िलटर मुझे हर अनुरोध का पता लगाने और प्रमाणीकृत करने में मदद करेगा, लेकिन ब्राउज़र बंद करने पर ऐसा कोई अनुरोध सर्वर पर नहीं भेजा जाएगा। – Prashant

0

आपको श्रोता को web.xml में पंजीकृत करने की आवश्यकता है!

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

लेकिन निश्चित रूप से यह केवल उस सत्र (एक समय समाप्ति या कुछ explicite कार्यक्रम संबंधी सत्र को नष्ट की वजह से) बंद कर दिया है का पता लगाने, लेकिन यह पता नहीं लगा पाया है कि किसी को अपने ब्राउज़र बंद कर दें। ऐसा इसलिए है क्योंकि बंद ब्रोसर के बारे में कोई http अधिसूचना नहीं है।

-3

आप ब्राउज़र बंद करने से समस्या का समाधान करने के लिए JQuery उपयोग कर सकते हैं,

JQuery हो जाएगा,

$(window).on('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

$(window).on('unload', function(){ 
    //alert("unload"); 
    $.ajax({ 
     type: "POST", 
     url: "Logout.html", 
     //data: "message=" + message, 
     dataType: "html", 

     success: function(response) { 

     }, 
     error: function(e) { 
      //alert('Error: ' + e); 
     } 
    }); 
}); 

में वसंत नियंत्रक,

@RequestMapping(value="Logout.html",method=RequestMethod.POST) 
public @ResponseBody String logout(HttpSession session){ 

    System.out.println("Request Logout"); 

    // Do you work before invalidate the session 

    session.invalidate(); 

} 

में web.xm एल इस जोड़ने के लिए, यदि आप HttpSessionEventPublisher सत्र घटना को नष्ट पकड़ने के लिए इस्तेमाल किया,

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

आशा इस मदद करता है।

+0

मैंने यह कोशिश नहीं की है लेकिन जावास्क्रिप्ट अक्षम होने पर या सिस्टम क्रैश होने पर क्या होगा। – Prashant

+0

जावास्क्रिप्ट को सक्षम होना चाहिए। आज, जावास्क्रिप्ट के बिना कोई वेब एप्लिकेशन नहीं है। –

+0

@ हाइपरलिंक यह अजाक्स के बिना सिर्फ JQuery का उपयोग करके भी किया जा सकता है क्योंकि हमारी प्रणाली सीधे क्लाइंट संचार के साथ सीधे स्प्रिंग एमवीसी का उपयोग करती है? धन्यवाद। –