侧边栏壁纸
博主头像
波哥

大龄程序猿&自由职业者&副业达人
爱好:敲代码、搞副业
12+年开发经验,热衷自动化网络推广!

  • 累计撰写 1,810 篇文章
  • 累计创建 77 个标签
  • 累计收到 13 条评论

目 录CONTENT

文章目录

若依Vue前后端分离版本更改算法-自定义加密算法

波哥
2022-10-12 / 0 评论 / 0 点赞 / 225 阅读 / 467 字

若依Vue前后端分离版本更改算法-自定义加密算法

" "

若依分离版使用的是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);
    }
}

最后修改身份认证接口:

image

到这我们实现了登录的密码验证以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);
    }

这样就修改了若依框架的密码加密、登陆验证方式了。

0

评论区