2011-10-25 24 views
25

這一定是一個普遍的問題......我覺得在Google使用Google之後,我一定沒有徹底地回過頭來看看答案是否足夠,或者沒有人問過它......所以請原諒我。如何在Hibernate中更新後重新加載Spring Security Principal?

我使用的Spring Security和Hibernate等

因此用戶/委託人登錄,並做了一些修改他們的個人資料。

我使用我的DAO更新配置文件(UserDetails),並且我希望我的Principal能夠自動反映此更新。

但是,當我再次得到委託人時,我得到髒版本(從我的初始登錄)。

有誰知道我如何讓Spring Security從Hibernate中重新加載更新的UserDetails?

+0

好的我發現了一些能夠幫助我的東西http://stackoverflow.com/questions/2398224/spring-security-autowire-providermanager 讓獲取提供者管理器允許我重新驗證。 現在問題似乎是,新的Principal具有所有外圍引用延遲初始化,導致它進一步拋出異常 – alwinc

+0

這實際上更多的是Hibernate/ORM策略問題,而不是Spring安全問題,儘管... 對? –

+1

是的,我對它進行了更多的研究,看起來Spring Sec使得UserDetails可以出於安全考慮而具有免疫力。因此,最佳做法是通過強制用戶重新輸入密碼來重新登錄用戶詳細信息。 – alwinc

回答

41

OK挖到最後找到答案。

我們可以創建一個UsernamePasswordAuthenticationToken並將更新的Principal分配給上下文。另請參閱「How to manually set an authenticated user in Spring Security/SpringMVC」。

+6

您的解決方案有效。但是,我會使用'PreAuthenticatedAuthenticationToken'而不是'UsernamePasswordAuthenticationToken'。這基本上做同樣的事情 - 它只是有助於澄清你的意圖,並提高你的代碼的可讀性 –

相關問題