整合Security 到SSM框架中 使用Spring Security下的BCryptPasswordEncoder进行密码加密(步骤一定不要错)

一.Spring Security安全框架实现密码加密方法简述

1.首先:Spring Security提供了强大的加密工具PasswordEncoder,PasswordEncoder接口的代码如下:

package org.springframework.security.crypto.password;

public interface PasswordEncoder {
    String encode(CharSequence var1);//是是对密码加密的方法

    boolean matches(CharSequence var1, String var2);//是用来验证密码和加密后密码是否一致的如果一致则返回true
}

2.其次:Spring Security提供了BCryptPasswordEncoder类,该类实现了Spring的PasswordEncoder接口,使用BCrypt强哈希方法来对密码进行加密,通过BCrypt强哈希方法每一次加密的结果都不一样:可以看看示例加密后的密码,需要说明的是这两种加密后的密码,其明文密码都是:123
在这里插入图片描述3.加密的代码,可以看到每次加密产生的都是随机字符串:

public String encode(CharSequence rawPassword) {
        String salt;
        if (this.strength > 0) {
            if (this.random != null) {
                salt = BCrypt.gensalt(this.strength, this.random);
            } else {
                salt = BCrypt.gensalt(this.strength);
            }
        } else {
            salt = BCrypt.gensalt();
        }

        return BCrypt.hashpw(rawPassword.toString(), salt);
    }

二.加密的具体实现步骤

1.在配置文件中配置加密所需要的工具类

<!--配置加密工具类-->
<bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

2.在service的实现层中注入BCryptPasswordEncoder

@Autowired
 private BCryptPasswordEncoder passwordEncoder;//通过注解拿到加密对象

3.然后在在service的实现层中的需要加密的操作方法中添加比如保存操作

//保存一个用户,使用加密算法把加密后的密码保存入数据库
    @Override
    public void save(SysUser sysUser) {
        //二.使用安全框架加密方式
        //1.Security安全框架加密操作:加密密码并存入sysUser对象中
        String encode = passwordEncoder.encode(sysUser.getPassword());//拿到加密后的密码
        sysUser.setPassword(encode);//将加密后的密码设置到sysUser对象中
        userDao.save(sysUser);
    }

4.以上配置结束你需要运行一下,添加一个用户(这个用户的密码是加密的),否则用之前没有加密的密码登录是会失败的 ;然后去除"{noop}"

//2.Security安全框架加密操作:去除+"{noop}"+————————————非常重要
            User user = new User(sysUser.getUsername(), sysUser.getPassword(), authorities);
            return user;

5.在配置文件中spring_security.xml 里面引用第一步配置的id

<!-- Security安全框架加密操作:引入加密操作-->
<security:password-encoder ref="passwordEncoder"/>
发布了43 篇原创文章 · 获赞 84 · 访问量 8217

猜你喜欢

转载自blog.csdn.net/weixin_43330884/article/details/104632267