我有一个使用 Spring 安全性的 Spring 项目。我之前使用的是 Spring Boot 1.5,现在迁移到了 Spring Boot 2.0。
我注意到 Md5PasswordEncoder已在 Spring Security 的最终版本中删除。相反,即使已弃用 ( https://docs.spring.io/spring-security/site/docs/5.0.3.RELEASE/api/),Md4PasswordEncoder
仍然存在。
我应该使用外部 MD5 编码器还是将分类移动到其他地方?
最佳答案
Md5PasswordEncoder
不复存在的事实并不意味着 Spring Security 5 无法创建 MD5
哈希。为此,它使用 new MessageDigestPasswordEncoder("MD5")
。
有两个选项,都与新的 DelegatingPasswordEncoder
一起使用,它需要一个密码前缀来确定哈希算法,例如 {MD5}password_hash
:
要么将默认密码编码器设置为MD5
(大写!),因此如果密码没有前缀,则应用默认编码器:
PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
passwordEncoder.setDefaultPasswordEncoderForMatches(new MessageDigestPasswordEncoder("MD5"));
或者用{MD5}
作为数据库中现有密码散列的前缀。这样,DelegatingPasswordEncoder
委托(delegate)给“MD5”哈希器。像这样的东西:
update myusertable set pwd = '{MD5}' || pwd;
关于java - Spring Security >5.0.0 移除了 Md5PasswordEncoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49633672/