2013-02-21 9 views
10

मैं जेएसएफ में प्राइमफेस के साथ एक लॉगिन आधारित एप्लिकेशन विकसित कर रहा हूं। उसमें मैंने सत्र स्कॉप्ड प्रबंधितबीन में लॉग इन उपयोगकर्ता की जानकारी रखी और मुझे उस विवरण को साफ़ करने की आवश्यकता है जब उसने लॉग आउट किया था, तो उन विवरणों को कैसे साफ़ किया जाए जो सत्रस्पेड प्रबंधित बीन ऑब्जेक्ट में हैं?सत्र स्कोप्ड प्रबंधित बीन स्कोप्ड के किसी ऑब्जेक्ट को कैसे साफ़ करें?

उत्तर

16

आप अपने कार्रवाई विधि में निम्नलिखित कार्यप्रणाली को कॉल करके वर्तमान सत्र रद्द करने के लिए की जरूरत है:,

FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 

के रूप में भी सत्र scoped सेम अनुवर्ती अनुरोध दफन ट्रैश किए गए हैं, हो सकता है एक रीडायरेक्ट भेजना सुनिश्चित करें:

FacesContext.getCurrentInstance().getExternalContext().redirect("/login.xhtml"); 

या, बस अपने विधि से एक नेविगेशन मामले परिणाम लौट:

return "login.xhtml?faces-redirect=true"; 

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

-2

जब उपयोगकर्ता लॉगआउट, सत्र नष्ट हो जाता है और सभी SessionScoped ManagedBean वस्तुओं भी

+2

एक "लॉगआउट" प्रति परिभाषा "सत्र नष्ट" नहीं है। हालांकि, आमतौर पर दूसरे तरीके से गोल है। – BalusC

+0

मैं सहमत नहीं हूं। लॉगआउट का अर्थ सामान्यतः "सत्र अमान्यता" है। यह सबसे अच्छा अभ्यास है और यह आम पैटर्न है। सत्र को नष्ट नहीं करना सुरक्षा समस्या –

+1

उह, सुनिश्चित करता है। अगर ऐसा होता तो ओपी इस सवाल को पहले स्थान पर नहीं पूछता था :) – BalusC

3

आप स्पष्ट करने के लिए सत्र सेम मैन्युअल रूप से प्रबंधित scoped जरूरत नहीं है। बस उपयोगकर्ता सत्र को साफ़ करें। लॉगआउट के लिए सर्वलेट में निम्न कोड का उपयोग करके।

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    System_Properties system_Properties=new System_Properties(); 
    PrintWriter out = response.getWriter(); 
    try { 
     request.getSession().invalidate();    
    }finally { 
     out.close(); 
    } 
} 

आप फिर भी मैन्युअल तो कामयाब सेम डेटा साफ़ यह निम्नलिखित कोड का उपयोग करके किया जा सकता है।

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managed_bean_name", null); 

जहां "mananged_bean_name" आपके प्रबंधित बीन का नाम है।

आशा है कि यह मदद करता है

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