使用 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);
}
}
想看更多精彩内容,可以关注我的博客园
我的博客园