[英]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.