升級到spring security5遇到的坑-密碼存儲格式


 

遇到的問題 
將spring security oauth2(包括spring security)升級到最新,代碼沒有改動,運行項目沒有報錯,但是頁面登陸時報錯:There is no PasswordEncoder mapped for the id “null”

然后一頓百度和google,其中看到兩處有幫助的資料: 
https://www.cnblogs.com/majianming/p/7923604.html 
https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released

總的來說就是,人家把spring security的密碼存儲格式改了,沒辦法,用人家的東西就要按照人家規定的做,將所有的密碼格式改掉吧。

格式:{id}encodedPassword

這id是一個標識符,用於查找是哪個PasswordEncoder,也就是你密碼加密的格式所對應的PasswordEncoder。encodedPassword是指原始加密后的密碼(有點繞,簡單來說就是你原來存儲的密碼)。在id必須在密碼的開始,id前后必須加{}。如果id找不到,id則會為空。 
spring security中的所有默認的密碼格式都是在PasswordEncoderFactories這個 類中,可以進入這個類中自行查看。

注意: 
1. 前端發送的登陸密碼,是不需要為{id}encodedPassword格式的。 
2. 如果你配置了spring security oauth2

@Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory().withClient("client").secret("{noop}secret") .authorizedGrantTypes("client_credentials", "password", "refresh_token").scopes("all"); }
  • 1
  • 2
  • 3
  • 4
  • 5

代碼中的secret也必須{id}encodedPassword格式。

https://blog.csdn.net/smollsnail/article/details/78934188

 

情景:

在一個后台admin系統中,為了安全用到Spring Security,我開啟了in-memory方式(就是登陸后,在內存中先認證,是否內存中寫死的賬號是否就是用戶登錄的那個賬號,密碼),但是又在其后面加入了“從數據庫中查找出該賬號是否存在”,這種認證方式。

在這兩種方式下,我登錄,先輸入一個在數據庫中存在的賬號,顯示,正常登錄進來。

又一次登錄后,我輸入一個在數據庫中找不到但是在內存中寫死的賬號,系統報異常,但是正常登錄進來。

再一次登錄后,我輸入一個既不在數據庫中,也不在內存中的賬號,這次,真登錄不了了。

那么,這是不是就證明了,在這兩種方式下,默認先去數據庫中查找,然后不管成功與否“或上”(||)是否為內存中的賬號。

https://blog.csdn.net/u012582402/article/details/54292488

 

 

解決springsecurity資源權限一次加載,導致角色授資源要重啟服務問題

https://blog.csdn.net/y666666y/article/details/70212064

 

 

 

https://www.baeldung.com/spring-security-5-default-password-encoder

 


免責聲明!

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



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