Redis作為一個非關係型資料庫,由於其超高的併發處理性能,及其對緩存場景所提供的系列能力構建,使其成為了集中緩存的絕佳選擇。本篇我們聊聊Redis數據管理的能力,如數據過期、數據淘汰、數據持久化等。 ...
簡單記錄一下從SpringBoot 2.6.0升級到3.0.1之後,無法成功登錄系統的問題。
目前的解決方法:
在SecurityConfiguration配置中添加 httpSecurity.securityContext().requireExplicitSave(false);
,然後就能正常登錄了。
但是沒法解釋的是,直接使用系統中預設的UsernamePasswordFilter時,是不用添加這一句也能正常登錄的。等過兩天再研究吧。
相關的鏈接:
SwitchUserFilter not working in Spring Security 6
https://github.com/spring-projects/spring-security/issues/12504
After upgrade to spring boot 3.0.0-M5, TestingAuthenticationToken and UsernamePasswordAuthenticationToken not work the same as spring boot 2.7.3 #11977
https://github.com/spring-projects/spring-security/issues/11977
Spring security does not redirect to success login after authentication success #4479
https://github.com/spring-projects/spring-security/issues/4479
寫給自己看的:
系統中有多個自定義的AuthenticationFilter和對應的自定義AuthenticationProvider。升級到3.0.1之後,無法成功登錄。
Debug的時候,發現在自定義的AuthenticationProvider中是能成功返回authentication的,但是之後卻不能成功重定向到首頁。如下麵鏈接中有提到的,認證信息被清除了。
後來又找到了幾個相關的關鍵詞 requireExplicitSave
SecurityContextHolderFilter
SecurityContextPersistenceFilter
之前是預設會自動存認證信息,現在需要顯式存儲。不過還是搞不清楚具體是什麼意思。
測試項目中的幾種情況:
1,自定義authentication provider,不用自定義的authentication filter,可以成功登錄。
2,自定義authentication provider,用了自定義的authentication filter,不能成功登錄。但是在配置中添加 httpSecurity.securityContext().requireExplicitSave(false) 之後,就能成功登錄。