【发布时间】:2019-07-25 18:11:42
【问题描述】:
我正在更改密码,然后转发到 /loginuser 并重定向到用户仪表板。因为我是初学者,所以我使用 httpbasic 身份验证保护了这一点,我在休眠中使用 createNativeSQLQuery 并从数据库中获取结果。我是否必须实现任何 UserDetailsService 接口 Spring Security?我的目标是只实现加密密码并将其存储在数据库中。我面临的问题是,我添加了一个 bean 配置,例如,
@Bean
public PasswordEncoder customPasswordEncoder() {
return new BCryptPasswordEncoder(){
@Override
public String encode(CharSequence rawPassword) {
return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
}
};
}
我不知道它为什么抛出这个异常。我们应该对盐轮进行硬编码吗?
java.lang.IllegalArgumentException: Invalid salt
at org.springframework.security.crypto.bcrypt.BCrypt.hashpw(BCrypt.java:552) ~[spring-security-core-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.security.crypto.bcrypt.BCrypt.checkpw(BCrypt.java:659) ~[spring-security-core-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at com.bootapp.FullTimeEquivalents.config.PasswordEncoderConfig$1.matches(PasswordEncoderConfig.java:29) ~[classes/:na]
【问题讨论】:
-
您是否确保将加密的数据存储在数据库中,而不是纯文本中,并且在匹配项中,您是否使用第一个参数为纯文本,第二个参数为编码的函数调用了该函数.
-
最初我将密码作为“密码”存储在数据库中,并尝试使用 PasswordEncoderConfig 类中的自定义 BcryptEncoder 配置更改密码和编码,同时尝试实现这一点我正面临这个问题
标签: java spring spring-boot spring-security