開始吧
1、 SpringSecurity提供的BCryptPasswordEncoder加密規則。 (加鹽料理)
所以直接用就好了!配置類中注入BCryptPasswordEncoder即可,改掉之前自定義的加密那個~
//SpringSecurity 提供的 BCryptPasswordEncoder 加密規則。 (加鹽料理)
@Autowired
BCryptPasswordEncoder bCryptPasswordEncoder;
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
...
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
//走賬號密碼驗證的方法
.userDetailsService(myUserDetailsService)
//走給輸入的密碼加密和比對兩個方法
.passwordEncoder(bCryptPasswordEncoder);
}
2、 測試即可
先加密存進數據庫
public static void main(String[] args) {
String password = "345";
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
//加密4次
for (int i = 0; i < 4; i++) {
System.out.println(bCryptPasswordEncoder.encode(password));
}
//$2a$10$DuGfkxRfB3yKHgGlJa5XMOuBWTdN/LUL2X3PVzn/l8QyTpX./tsDe
//$2a$10$g3dPiQpPKEtEsxZa3mVFnOC0FCCnwbOL88Sm3z2E9esDYIE6a52eG
//$2a$10$NuviTSbDkaU/CIOEyRS20OyTAcPd16mStcLSvY3XzYwkVMRwFlrlC
//$2a$10$ppvXuLtB0QTNAxMlmzoca.Te98CfCHRzNPVR9GQKlLe7eBWLumBF6
}
測試成功的?不,不成功!!!
3、 錯誤!
org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.matches Encoded password does not look like BCrypt
笑了!搞的我輸入的密碼不像你BCrypt,代碼是框架處理的。我也檢查了,也在main方法中測試了是true的!你給我整個不像你的密碼!~~~
然后我就去找數據庫的麻煩!哈哈
發現的確是因為表中密碼字段的長度不夠!存入的加密后的字符串太長,沒有存完整。導致判斷的時候不匹配!
程序中出錯是好事兒!但是出錯多了那就是你細不細細心的問題了~