[英]Spring session management in mvc, Spring security session vs http session
[英]Session management using spring security
我已經使用UserDetailsService創建了一個基本的spring安全認證,現在我可以驗證用戶了。 但是,我不明白如何實現以下目標:
我知道Spring攔截器的概念,在這里我可以攔截所有傳入的請求。 但是,在Spring Security中有什么可以做到的嗎?
我瀏覽了現有答案,但是大多數示例都是用於登錄的。
如果有人可以給我例子,我將不勝感激。
編輯:我認為我應該使用會話范圍的bean來維護用戶的會話內容,而不是直接操作httpsession。
首先,您需要使用當前的HttpRequest創建一個Authentication對象,如下所示:
public class SessionService{
public Authentication getSession(HttpServletRequest request) {
HttpSession session=request.getSession();
SecurityContext ctx= (SecurityContext) session.getAttribute("SPRING_SECURITY_CONTEXT");
Authentication auth=ctx.getAuthentication();
return auth;
}
}
然后,可以通過傳遞當前的HttpRequest,從該Authentication對象檢索會話詳細信息,如下所示:
Authentication auth = sessionService.getSession(request);
上面的auth對象包含您需要的詳細信息。
我認為您確實需要花一些時間閱讀Spring安全文檔以及所有JSP,Servlet和MVC架構。 你有一些誤會,
身份驗證后,您無需啟動請求發出時已經存在的會話。 記住request.getSession()
我們從請求中獲取會話的,我真的不知道有其他方法可以實例化會話對象並將其分配給請求/響應。 成功通過身份驗證后,spring會在會話中自動設置一個SPRING_SECURITY_CONTEXT屬性,以后該變量將用於確定用戶是否已通過身份驗證(Spring會為您執行此操作,您無需使用此屬性)。
在Spring Security中,我們設置了一個身份驗證入口點,該入口點包含有關登錄頁面URL的信息和FORM_LOGIN_FILTER,其中包含有關登錄處理URL,登錄成功URL和登錄失敗URL的信息。每個會話的請求都沒有SPRING_SECURITY_CONTEXT和auth屬性重定向到登錄頁面URL。
我可以直接給出代碼,但是如果您至少在這里閱讀Spring文檔的幾頁,那將是很棒的。 一旦理解了這些概念,仍然無法解決問題。 編輯包含詳細問題的問題,我們將嘗試解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.