簡體   English   中英

如何在spring中新建一個session?

[英]How to create a new session in spring?

我將 spring 3(注釋)與 jsf 一起使用,我知道如何創建 session 以及之后如何使其無效...

所以當我登錄並在最后使用注銷按鈕時,一切都很好。 但問題是,如果我不單擊注銷按鈕,session 仍然存在。 如果我現在用不同的用戶登錄,那么舊的 session 數據仍然存在——因為舊的 session 沒有失效。

那么如果舊的 session 沒有失效,我如何強制系統創建一個新的 session?

您應該在用戶登錄時清除 session。這樣,無論他們是否注銷,您都可以重新開始:

@RequestMapping("login")
public String login(LoginForm form, HttpServletRequest request, HttpSession session) {

    session.invalidate();
    HttpSession newSession = request.getSession(); // create session

    // log the user in

    return "successPage";
}    

史蒂夫的回答很好。 只是為了添加更多上下文,您應該始終在用戶身份驗證事件之后使 session 無效並創建一個新的 session 作為針對 session 固定攻擊的最佳實踐。

完成您要完成的任務的另一種方法是使用 Spring Security。 我不確定您是否考慮過它,但默認情況下,它會在每次用戶登錄時為您處理失效和生成新會話。 此外,它還有其他功能,您可能會覺得有用,也可能不會覺得有用。 此鏈接可能會有幫助: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/ns-config.html 滾動到“3.3.3/ Session 固定攻擊保護”部分以獲取與您的問題相關的信息

要在注銷后創建新的 session,請檢查session.isNew()條件,如果session 是舊的,則調用invalidate() 將注銷方法重定向到/login映射。 它檢查 session 並在您調用invalidate()方法時創建新的 session。

注銷代碼:

@RequestMapping("/logout")
public String logout() {
    return "redirect:/login";
}

登錄密碼:

@RequestMapping(value = "/login")
public String login(HttpServletRequest request, HttpSession session) {
    /*
     * create new session if session is not new
     */
    if (!session.isNew()) {
        session.invalidate();
    }
    return "login";
}

暫無
暫無

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

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