SecurityContextHolder.getContext().getAuthentication()顯示anonymousUser匿名用戶問題


項目場景:在使用Spring security做用戶認證從SecurityContextHolder中獲取用戶信息時,遇見如下問題:

分析原因:獲取不到登錄時儲存的用戶信息,猜測可能是在執行完某些操作之后將用戶信息替換或者直接清空了。查看SecurityContextHolder的api發現里面有個clearContext()方法,通過debug模式發現當執行完org.springframework.security.web.context.SecurityContextPersistenceFilter和org.springframework.security.web.FilterChainProxy過濾器時會調用SecurityContextHolder.clearContext()方法把SecurityContextHolder清空,所以獲取不到存儲的用戶信息。

解決方案:找到了問題所在就好解決了,可以自定義過濾器重新保存用戶認證信息,如代碼中自定義的MyAuthenticationTokenGenericFilter

改進之后的結果如下:

需要注意的是,如果需要用到權限認證,還需保存用戶的權限信息,我這里暫時不用,所以沒保留,只需要替換成這個構造函數就可以new UsernamePasswordAuthenticationToken(Object principal, Object credentials, Collection<? extends GrantedAuthority> authorities)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM