"
"
若依分离版使用的是Spring Security实现,framework模块下有个security包,这里面是若依自己封装的认证失败处理类等,与加密登录验证无关,跳过。我们需要关注的是framework模块下的config包下的SecurityConfig类,里面有两个方法:
/**
* 强散列哈希加密实现
*/
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder()
{
return new BCryptPasswordEncoder();
}
/**
* 身份认证接口
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
}
Spring Security通过passwordEncoder()进行身份认证,参数为PasswordEncoder接口类,也就是说传入的参数是需要实现PasswordEncoder接口的类,BCryptPasswordEncoder类是强散列哈希类,关于这个类的说明我们在此不介绍,它是一种哈希算法,详情自行百度,既然知道身份认证使用的方法了,咱们自定义一个Md5加密方法:
/**
* Md5加密实现
* @return
*/
@Bean
public Md5PasswordEncoder md5PasswordEncoder(){
return new Md5PasswordEncoder();
}
在common模块下新建一个类Md5PasswordEncoder并实现PasswordEncoder接口
public class Md5PasswordEncoder implements PasswordEncoder {
@Override
public String encode(CharSequence rawPassword) {
return Md5Utils.hash(rawPassword.toString());
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return Md5Utils.hash(rawPassword.toString()).equals(encodedPassword);
}
}
最后修改身份认证接口:
到这我们实现了登录的密码验证以md5的方式验证,下面我们再将注册用户、修改密码时的加密算法替换掉:
com.e21.common.utils.SecurityUtils:
/**
* 生成BCryptPasswordEncoder密码
* 修改为md5加密
*
* @param password 密码
* @return 加密字符串
*/
public static String encryptPassword(String password)
{
//BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
//return passwordEncoder.encode(password);
return Md5Utils.hash(password);
}
/**
* 判断密码是否相同
*
* @param rawPassword 真实密码
* @param encodedPassword 加密后字符
* @return 结果
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
// BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// return passwordEncoder.matches(rawPassword, encodedPassword);
Md5PasswordEncoder md5PasswordEncoder=new Md5PasswordEncoder();
return md5PasswordEncoder.matches(rawPassword,encodedPassword);
}
这样就修改了若依框架的密码加密、登陆验证方式了。