Session.invalidate का उपयोग कर JSF लॉगआउट वर्तमान उपयोगकर्ता नाम को साफ़ नहीं करता है?




httpsession (2)

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

एक अनुप्रेषित भेजने के लिए JSF को बाध्य करने के लिए नेविगेशन केस पर <redirect/> जोड़ें। या जब आप पहले से ही JSF 2.0 में हैं, तो ?faces-redirect=true को परिणाम मान पर जोड़ें।

मेरे जेएसएफ आवेदन में, मुझे इस तरह वर्तमान में हस्ताक्षरित उपयोगकर्ता का नाम मिलता है ...

public String getLoggedInUsername() {
  return FacesContext.getCurrentInstance().getExternalContext().getRemoteUser();
}

... और मैं जांचता हूं कि उपयोगकर्ता इस तरह साइन-इन कर रहा है ...

public boolean isSignedIn() {
  return (getLoggedInUsername() != null);
}

... और जब उपयोगकर्ता बाहर निकलता है, तो मैं यह करता हूं ...

public String doLogout() {
  FacesContext facesContext = FacesContext.getCurrentInstance();
  HttpSession httpSession = (HttpSession)facesContext.getExternalContext().getSession(false);
  httpSession.invalidate();
  return "main";
}

मेरी समस्या doLogout () के बाद है, getLoggedInUsername () अभी भी उस उपयोगकर्ता का नाम देता है जो लॉग इन हुआ था। मुझे यकीन है कि getRemoteUser () लॉगआउट के बाद रिक्त रिटर्न करने के लिए क्या करना चाहिए था?

वैकल्पिक रूप से, अगर यूज़रनेम की जांच करने से अधिक है तो साइन-इनइन () प्राप्त करने का एक बेहतर तरीका है?

धन्यवाद! लूटना


कॉल के बाद "session.invalidate ();" , "request.logout ();" जोड़ें।

विधि सत्र ऑब्जेक्ट पर विधि को केवल साफ सत्र डेटा साफ़ करता है

अनुरोध ऑब्जेक्ट पर ऑब्जेक्ट लॉगआउट को रिक्त स्थान के रूप में रिक्त किया जाता है क्योंकि getUserPrincipal, getRemoteUser और getAuthType को अनुरोध पर कॉल किया जाता है।