2016-06-12 107 views
0

從春季會議休息樣本:http://docs.spring.io/spring-session/docs/current/reference/html5/guides/rest.html春季會議休息和好的AuthenticationManager

我已經部署在Cloud Foundry的樣品和它的作品。 我想知道會話如何與Spring Security AuthenticationManager一起使用來在第二個請求中驗證x-auth令牌。 我在Spring Session中檢查了代碼,但沒有找到任何細節。

我的理解是,身份驗證管理器將通過x-auth-token在SessionRepository中查找會話。

有人可以告訴我在Spring Session Rest中的身份驗證是如何工作的嗎?

+0

請不要發佈裸鏈接,而是使用「插入超鏈接」(Ctrl + L)。 – Stacked

回答

0

實際上就Spring Security而言,與沒有使用Spring Session的應用程序(即使用Servlet容器的內部會話存儲和JSESSIONID cookie)相比,此示例中沒有什麼不同。

春季會議使用org.springframework.session.web.http.SessionRepositoryFilter用Spring會議支持的自定義實現替換Servlet容器的實現。此篩選器還提供HttpSessionStrategy(基於cookie或基於HTTP請求標頭的示例),以將您提供的信息(再次通過cookie或標頭)與存儲在您選擇的SessionRepository中的會話相關聯。之後,這完全取決於您的應用程序如何使用會話。

請注意,Spring Security的AuthenticationManager只處理所提供的Authentication令牌的身份驗證請求。它沒有任何會話知識,或任何其他Web/Servlet API相關的知識。

+0

基於春季會話休息樣本,x-auth令牌可以包含在標頭中進行驗證。事情是爲了AuthenticationManager,來自SecurityContextHolder的Authentication是空的。 – shcoder

+0

正如在上面的答案中所解釋的那樣,'x-auth-token'標頭只用於將你的請求與在服務器上保存的會話相關聯,它並不直接與認證過程本身相關聯。請參閱'SessionRepositoryFilter'源文件和Javadoc。你也可以看看[這個回購的'session-strategy'示例](https://github.com/vpavic-demos/javacro16-spring-session),因爲它更簡單,不包含Spring Security。 –

+0

我檢查了Spring Session和Spring Security的源代碼。 Spring Session SessionRepositoryFilter將用Spring Session代替HttpSession。 SecurityContextPersistenceFilter會做到這一點。用戶第一次登錄時,安全上下文將被生成並存儲在Spring Session中並由SecurityContextRepository保存。下次用戶登錄時,SecurityContextPersistenceFilter將從SecurityContextRepository中加載上下文並在SecurityContextHolder中進行設置。如果情況並非如此,請糾正我。 – shcoder