如何使用 BCryptPasswordEncoder 随机盐加密?如何应用到账号密码验证思路?
使用 BCryptPasswordEncoder 随机盐加密步骤:
1.导入springboot的安全框架依赖:
<!-- BCryptPasswordEncoder 加密--> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.0.1.RELEASE</version> </dependency>
2.初始化 BCryptPasswordEncoder
package cn.mindgd.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * 加密工具初始化 */ @Configuration public class PasswordConfig { @Bean public BCryptPasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } }
3.使用 BCryptPasswordEncoder 加密 和 验证,如下
package cn.mindgd.test; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * BCryptPasswordEncoder测试类 */ @SpringBootTest public class BCryptPasswordEncoderTest { @Autowired private BCryptPasswordEncoder passwordEncoder; @Test public void testBCryptPasswordEncoder() { String password = "admin123"; String encodePassword = passwordEncoder.encode(password);//随机盐加密后的密码 System.out.println("输出:" + encodePassword); String ep = ""; boolean flag = passwordEncoder.matches(password, encodePassword); if (flag) {//判断 matches()方法的值去判断密码是否正确 System.out.println("验证成功!!"); } else { System.out.println("验证失败!!"); } System.out.println("长度:" + encodePassword.length()); } }
结果如下:
现在我们用生成的字符串去验证:
下面我们来写一下验证账号密码的思路:
1.先通过用户名判断是否存在
2.使用 matches()验证密码,第一个参数就是前端传过来的密码,第二个参数为存在数据库加密过的密码
一般就是这两个步骤,由于我做的项目是逻辑删除和状态的,所以多做了这个步骤
/** * @author: JiaXinMa * @description: 验证账号密码 * @date: 2021/4/2 */ public User findUserByNameAndPwd(String username, String password) { try { //1.判断用户名是否存在 User user = new User(); user.setUsername(username); QueryWrapper<User> queryWrapper = Wrappers.query(user); User loginUser = userMapper.selectOne(queryWrapper); if (loginUser == null) { throw new MdException(ExceptionEnum.INVALID_USERNAME); } //2.判断密码是否正确 if (!passwordEncoder.matches(password, loginUser.getPassword())) { throw new MdException(ExceptionEnum.INVALID_PASSWORD); } //3.判断用户是存在和启用,is_delete 0为不删除,status 1为启动状态 if (loginUser.getIsDelete().equals('1') || loginUser.getStatus() == 0) { throw new MdException(ExceptionEnum.INVALID_USERNAME); } return loginUser; } catch (Exception e) { throw new MdException(ExceptionEnum.INVALID_USERNAME_PASSWORD); } }
想看更多精彩内容,可以关注我的CSDN