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

 

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

而後一頓百度和google,其中看到兩處有幫助的資料: 
http://www.javashuo.com/article/p-odcvddzw-md.html 
https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released前端

總的來講就是,人家把spring security的密碼存儲格式改了,沒辦法,用人家的東西就要按照人家規定的作,將全部的密碼格式改掉吧。java

格式:{id}encodedPasswordspring

這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格式。app

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

 

情景:oop

在一個後臺admin系統中,爲了安全用到Spring Security,我開啓了in-memory方式(就是登錄後,在內存中先認證,是否內存中寫死的帳號是否就是用戶登陸的那個帳號,密碼),可是又在其後面加入了「從數據庫中查找出該帳號是否存在」,這種認證方式。google

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

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

再一次登陸後,我輸入一個既不在數據庫中,也不在內存中的帳號,此次,真登陸不了了。

那麼,這是否是就證實了,在這兩種方式下,默認先去數據庫中查找,而後無論成功與否「或上」(||)是否爲內存中的帳號。

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

相關文章
相關標籤/搜索