开始吧
1、 认识MD5
简单理解:是一个算法(消息摘要算法)。实现原理。
2、 自定义类MyPasswordEncoderService实现PasswordEncoder接口
package com.zhoujinyuan.springsecurity.service;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
@Component
public class MyPasswordEncoderService implements PasswordEncoder {
/**
* 进行加密的方法
*
* @param rawPassword 未加密的密码
* @return
*/
@Override
public String encode(CharSequence rawPassword) {
return privateEncode(rawPassword);
}
/**
* 进行密码比对的方法
*
* @param rawPassword 未加密的密码
* @param encodedPassword 加密的密码
* @return
*/
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return Objects.equals(privateEncode(rawPassword),encodedPassword);
}
/**
* 加密方法
*/
private String privateEncode(CharSequence rawPassword){
String algorithm = "MD5";
String encoded = null;
try {
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
// 获取输入的字节数组
byte[] input = ((String) rawPassword).getBytes();
// 加密
byte[] output = messageDigest.digest(input);
// 将加密后的字节数组转成 16 进制
encoded = new BigInteger(1, output).toString(16).toUpperCase();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return encoded;
}
}
3、 去配置类配置
//重写另外一个父类的方法,来设置登录系统的账号密码(走数据库)
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//使用自定义 MyUserDetailsService 完成登录
auth
//走账号密码验证的方法
.userDetailsService(myUserDetailsService)
//走给输入的密码加密和比对两个方法
.passwordEncoder(myPasswordEncoderService);
}
4、 测试即可
测试是成功的~