08 SpringSecurity-密码加密

文章配套代码: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.启动项目测试:

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七号公园的忧伤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值