2009-06-04 7 views
6

मैं सत्रसूची से अनुरोध शीर्षलेखों तक कैसे पहुंच सकता हूं?एक HttpSessionListener में जब मैं HttpServletRequest कैसे प्राप्त कर सकता हूं?

मुझे बनाए जाने पर वर्तमान सत्र पर टाइमआउट सेट करने की आवश्यकता है। HttpServletRequest में शीर्षलेख के आधार पर टाइमआउट को अलग-अलग करने की आवश्यकता है। मेरे पास पहले से सत्र सत्र है (HttpSessionListener लागू करता है) जो नए सत्रों के निर्माण और विनाश को लॉग करता है, और यह टाइमआउट सेट करने के लिए सबसे तार्किक स्थान प्रतीत होता है।

मैंने निम्नलिखित की कोशिश की है, लेकिन यह हमेशा सीटीएक्स को शून्य पर सेट करता है।

FacesContext ctx = FacesContext.getCurrentInstance(); 

उत्तर

8

HttpSessionListener अनुरोध के लिए उपयोग नहीं है क्योंकि इसे तब से लागू किया जाता है जब सत्र विनाश को सूचित करने के लिए — कोई अनुरोध नहीं किया गया है।

तो, Filter या Servlet अनुरोध की जांच करने और सत्र समय समाप्ति निर्दिष्ट करने के लिए बेहतर स्थान होंगे।

1

आप नहीं देख सकते (the API देखें)। अनुरोध आपको सत्र तक पहुंचने की अनुमति देता है, लेकिन दूसरी तरफ नहीं।

आपके पास एक ही सत्र के लिए समवर्ती अनुरोध भी हो सकते हैं, इसलिए यह संभव नहीं है।

+3

"आपके पास एक ही सत्र के लिए समवर्ती अनुरोध भी हो सकते हैं, इसलिए यह संभव नहीं है।" मैं सहमत नहीं हूँ! केवल एक अनुरोध सत्र का निर्माण करेगा जिसके लिए "sessionCreated" निकाल दिया गया है। यह spec में एक निरीक्षण है ... "सत्रित" विधि के लिए आपको यह पता लगाने में सक्षम होना चाहिए कि किस सत्र ने सत्र बनाया है! –

2
FacesContext ctx = FacesContext.getCurrentInstance(); 

जेएसएफ संदर्भ प्रति अनुरोध और थ्रेड-लोकल हैं। इसलिए, यह विधि कॉल शायद जेएसएफ नियंत्रक आमंत्रण (उदा। FacesServlet.service) के बाहर शून्य हो जाएगी - इसलिए, अन्य धागे और किसी भी अनुरोध जो फेस सर्वलेट मैपिंग से गुजरता नहीं है।

यह तकनीकी रूप से एक JSF तंत्र का उपयोग करते हुए इस टाइम-आउट सेट करना संभव है - आप RENDER RESPONSE के बाद एक सत्र के लिए जाँच करने के लिए एक phase listener इस्तेमाल कर सकते हैं, आप अभी भी cast to the servlet API करने के लिए होता है, हालांकि टाइम-आउट सेट करने के लिए। चरण श्रोताओं का लाभ यह है कि वे चेहरे-कॉन्फ़िगरेशन (see spec) या for specific views में वैश्विक रूप से पंजीकृत हो सकते हैं। मेटा-आईएनएफ/चेहरे-config.xml के साथ एक जेएआर में परिभाषित एक वैश्विक चरण श्रोता को कई WAR में गिराया जा सकता है, जिससे आप आसानी से कार्यक्षमता का पुन: उपयोग कर सकते हैं।

(तुम भी override how the session is provisioned to JSF कर सकते थे, लेकिन काम की राशि अत्यधिक है।)

एक बंद के लिए, एक Filter की erickson's suggestion वास्तव में सरल है।

संबंधित मुद्दे