編輯:這個問題原來是用戶錯誤,密碼已更改,因此哈希永遠不會匹配我在 Spring 4.2.2 的工具包中使用簡單的身份驗證,使用 DAO 讀取 (Postgres) 數據庫表以獲取用戶名、密碼和權限@EnableWebSecurity@Configurationclass X extends WebSecurityConfigurerAdapter{ ... @Autowired private SessionRegistry sessionRegistry; @Autowired private SessionAuthenticationStrategy sessionAuthenticationStrategy; @Override protected void configure(HttpSecurity http){ http.sessionManagement().sessionAuthenticationStrategy(sessionAuthenticationStrategy).maximumSessions(1).sessionRegistry(sessionRegistry).expiredUrl("/login.jsp"); //presumably unrelated additional code related to matchers, roles, https } @Bean public SessionRegistry sessionRegistry(){ return new SessionRegistryImpl(); } @Bean public SessionAuthenticationStrategy sessionAuthenticationStrategy(){ return new ConcurrentSessionControlAuthenticationStrategy(sessionRegistry); } @Bean public PasswordEncoder passwordEncoder(){ return new StandardPasswordEncoder(); } ...}最近我恢復了數據庫的舊副本,舊數據庫來自Redhat 6 服務器,新數據庫是CentOS 7,但實際上因為這都是數據庫支持的,所以應該沒有關系。我們代碼的身份驗證部分根本沒有改變,但是盡管輸入了正確的憑據,但由于我恢復了數據庫,所以我得到了BadCredentialsException: Bad credentials at org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:98) atorg.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:165) at org.springframework.security.authentication.ProvideManager.authenticate(ProviderManager.java:167) at.... 堆棧跟蹤的其余部分是堆棧跟蹤的更多標準 spring/catalina/java 位,沒有任何自定義。它沒有過期,我已經刪除了 cookie,它沒有被禁用....這段代碼在字面意義上沒有改變,支持數據庫表或 Spring 庫也沒有改變。調試 我可以確認通過用戶名檢索到正確的用戶,因為它用于驗證用戶對象是使用密碼哈希和權限正確構造的。由于其中大部分是由 Spring 類的默認行為完成的,因此我無法在代碼發生時單步執行很多代碼,因此很難確定實際的錯誤憑證發生的位置以及到底發生了什么變化。谷歌搜索,我發現很多用戶都遇到了問題,但幾乎都是處理初始錯誤配置的問題。這不是問題,因為這段代碼曾經有效。有沒有我可以測試的與 Spring 安全相關的已知問題?如果做不到這一點,我該如何進一步分類?
數據庫恢復后 Spring 身份驗證失敗
慕田峪9158850
2022-12-28 10:00:31