簡體   English   中英

成功登錄后會自動重新創建JSESSIONID

[英]JSESSIONID is getting recreated automatically after successful login

要求是JSESSIONID在登錄之前和之后必須不同。

流程是login.jsp-> loginwebaction-> loginsuccess.jsp->過濾器-> otheraction

我的代碼是

  1. 成功登錄后(在loginwebaction中),
  2. 將所有屬性從會話復制到地圖,
  3. 使會話無效,
  4. 重新創建會話HttpSession session = request.getSession(true);
  5. 將所有屬性從map復制到新會話,

成功登錄后,Jsessionid會更改,並顯示loginsuccess.jsp。 但我有一個問題。

此后,如果我單擊任何其他鏈接以執行其他操作,則會點擊過濾器。 在過濾器中,我必須檢查會話以獲取用戶信息(如果他已登錄),否則必須顯示錯誤頁面。

HttpSession session = request.getSession();
if(null == session.getAttribute("USER_INFO")){
    //redirect to error page
}

問題是:在過濾器中訪問的會話是新的,不知道如何重新創建它。 過濾器中的代碼是

誰能幫助我,如何進一步糾正此會話更改?

如我所見,您的代碼中的問題是:

HttpSession session = request.getSession();

如果不存在會話, request.getSession() Servlet API中request.getSession()創建一個新會話。 您需要將其更改為:

HttpSession session = request.getSession(false);

這將確保它返回現有的會話對象(如果有效),或者如果沒有會話,則返回null。

另外,以下幾行代碼實際上是相同的:

HttpSession session = request.getSession();
//Overloaded getSession with 'true' boolean argument
HttpSession session = request.getSession(true);

希望這可以幫助。

如果這不能解決您的問題,則可能是其他問題。 請添加您的用例的框架代碼,以便我嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM