文章配套代码:https://gitee.com/lookoutthebush/spring-security-demo

一、SpringSecurity加密机制

Spring Security内置了密码加密机制,只需使用一个PasswordEncoder接口即可

public interface PasswordEncoder {
    String encode(CharSequence rawPassword);

    boolean matches(CharSequence rawPassword, String encodedPassword);

    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}

PasswordEncoder接口定义了encode和matches两个方法,当用数据库存储用户密码时,加密过程用 encode方法,matches方法用于判断用户登录时输入的密码是否正确。

此外,SpringSecurity还内置了几种常用的PasswordEncoder接口实现类,例如,StandardPasswordEncoder中的常规摘要算法(SHA-256等)、BCryptPasswordEncoder加密,以及类似 BCrypt的慢散列加密Pbkdf2PasswordEncoder等,官方推荐使用BCryptPasswordEncoder。

我们这里使用官方推荐的BCryptPasswordEncoder。

二、注入BCryptPasswordEncoder

/**
 * @author LookOutTheBush
 */
@Configuration
public class PasswordEncoderConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(12);
    }
}

三、创建用户时加密

@Service
public class UserServiceImpl implements UserDetailsService {
    @Resource
    private UserDao userDao;
    @Resource
    private PasswordEncoder passwordEncoder;

    public UsersDO createUser(UsersDO usersDO){
        //参数校验 todo
        usersDO.setPassword(passwordEncoder.encode(usersDO.getPassword()));
        usersDO.setEnable(true);
        return userDao.createUser(usersDO);
    }
}

四、登录时密码校验

这部分SpringSecurity会使用我们暴露的加密方式来校验密码,不需要我们操作。

五、测试

1.直接生成加密后的密码。

    public static void main(String[] args) {
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(12);
        String encode = bCryptPasswordEncoder.encode("123");
        System.out.println(encode);
    }

2.然后手动添加到数据库中 

3.启动项目测试:

 输入账号密码,登录成功。


版权声明:本文为LookOutThe原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/LookOutThe/article/details/122876591