Spring boot 2.0.1引用的security 依賴是 spring security 5.X版本揭措,此版本需要提供一個PasswordEncorder的實例,否則后臺匯報錯誤:
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
并且頁面毫無響應刻蚯。
因此绊含,需要創(chuàng)建PasswordEncorder的實現(xiàn)類。
import org.springframework.security.crypto.password.PasswordEncoder;
public class MyPasswordEncoder implements PasswordEncoder {
@Override
public String encode(CharSequence charSequence) {
return charSequence.toString();
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return s.equals(charSequence.toString());
}
}
此類使用了最簡單的明文密碼作為測試炊汹。
在內(nèi)存用戶驗證里添加
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new MyPasswordEncoder())
.withUser("admin").password("123456").roles("ADMIN","USER").and()
.withUser("user").password("111").roles("USER");
}
.passwordEncoder(new MyPasswordEncoder())躬充。
這樣,頁面提交時候讨便,密碼以明文的方式進行匹配充甚。
方式二:
使用Spring Security自帶的PasswordEncoder的實現(xiàn),比如:BCryptPasswordEncoder霸褒。
BCryptPasswordEncoder采用SHA-256 +隨機鹽+密鑰對密碼進行加密伴找。
PasswordEncoder的實現(xiàn)類:
PasswordEncoder實現(xiàn)類.png