我的项目中有这种情况,我真的不知道如何解决。此应用程序是在Spring MVC上创建的,作为管理员,我可以创建/更新用户。现在我使用BCryptPasswordEncoder来加密存储在MySql DB中的创建用户的密码。
现在问题是由于我们无法真正解码用BCryptPasswordEncoder加密的加密密码。对于前者现在我创建了一个密码为“SpringMVC @#”的用户,点击保存后,它被编码器加密,就像“$ 2a $ 10 $ Cjcstw1UKZstCA19NiF4mOGMHMEMFojNozW5fH7qZ5RJ7Atz24IzG”这是 一个60字符长的盐渍值。现在我无法解密这个值,并且在密码字段中显示为***************(相当于 SpringMVC @#)更新导致重大问题的用户屏幕。
在创建用户时,我输入以下字段:用户名,密码,角色,有效指标(这是值为Y或N的下拉列表)
现在问题是当我进入更新屏幕更新用户详细信息时,密码值从数据库中获取并显示如下:
此处显示的密码实际上是加密/加盐的密码,长度为60个字符,从DB中提取。现在的问题是当我更新一个字段(比如角色)并点击提交时,它还会使用双重加密更新密码(已经加密),即该值再次被加密和更新。并且我无法知道更新后数据库中存储的值。因此,当该用户再次尝试登录该应用程序时,它无法说明其凭据错误。
以下是 SecurityConfig.java 文件的代码,该文件扩展了 WebSecurityConfigurerAdapter
glBufferData(GL_ARRAY_BUFFER, faceGeometry.vertexCount*4*sizeof(GLfloat), faceGeometry.vertices, GL_DYNAMIC_DRAW);
以下是UserController.java的代码片段:
@Autowired
DBAuthenticationService DBAauthenticationService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(dbAauthenticationService).passwordEncoder(passwordEncoder());
}
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
现在,我的疑问是:
1)无论如何我可以解码加密的DB密码吗?
或
2)还有另一种方法可以解决这个问题吗?