dre*_*nda 7 java spring spring-security spring-boot
我有一个使用Spring安全性的Spring项目。我当时使用的是Spring Boot 1.5,现在我迁移到了Spring Boot 2.0。
我注意到Md5PasswordEncoder在Spring Security的最终版本中已被删除。相反,Md4PasswordEncoder即使弃用仍然存在(https://docs.spring.io/spring-security/site/docs/5.0.3.RELEASE/api/)。
我应该使用扩展MD5编码器还是将分类移动到其他地方?
这一事实Md5PasswordEncoder已不存在并不意味着春季安全5是无法创建MD5哈希。它new MessageDigestPasswordEncoder("MD5")用于此。
有两个选项,两个都与new一起使用DelegatingPasswordEncoder,它们需要一个密码前缀来确定哈希算法,例如{MD5}password_hash:
可以将默认密码编码器设置为MD5(大写!),因此,如果密码没有前缀,则将应用默认编码器:
PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
passwordEncoder.setDefaultPasswordEncoderForMatches(new MessageDigestPasswordEncoder("MD5"));
Run Code Online (Sandbox Code Playgroud)
或在数据库中为现有密码哈希添加前缀{MD5}。这样,DelegatingPasswordEncoder代表“ MD5”哈希器。就像是:
update myusertable set pwd = '{MD5}' || pwd;
Run Code Online (Sandbox Code Playgroud)
如果要使用MD5,可以自定义:
@Bean
public PasswordEncoder passwordEncoder() {
return new PasswordEncoder() {
@Override
public String encode(CharSequence charSequence) {
return getMd5(charSequence.toString());
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return getMd5(charSequence.toString()).equals(s);
}
};
}
public static String getMd5(String input) {
try {
// Static getInstance method is called with hashing SHA
MessageDigest md = MessageDigest.getInstance("MD5");
// digest() method called
// to calculate message digest of an input
// and return array of byte
byte[] messageDigest = md.digest(input.getBytes());
// Convert byte array into signum representation
BigInteger no = new BigInteger(1, messageDigest);
// Convert message digest into hex value
String hashtext = no.toString(16);
while (hashtext.length() < 32) {
hashtext = "0" + hashtext;
}
return hashtext;
}
// For specifying wrong message digest algorithms
catch (NoSuchAlgorithmException e) {
System.out.println("Exception thrown"
+ " for incorrect algorithm: " + e);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8592 次 |
| 最近记录: |