1.环境
- Windows 10
- 数据库MySQL 5.5
- idea 2020.3
- springboot 2.0.1.RELEASE
- Maven 3.6.2
- jdk 1.8
2.pom文件引入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
3.在controller层(Service层)进行注入
@Autowired
private BCryptPasswordEncoder encoder;
4.在注册接口或添加接口进行加密
/**
* 增加
* @param admin 用户实体类
*/
@PostMapping("/adduser")
public Boolean add(@RequestBody Admin admin ){
//获取用户的密码,并调用encode函数进行加密,加密后的密码在放入实体类中
admin.setPassword(encoder.encode(admin.getPassword()));
//调用service层的的添加方法添加用户
adminService.add(admin);
//返回结果
return true;
}
5.测试添加用户功能
? ? ? ? 这里我使用Swagger进行测试,两次输入相同的密码
? ? ? ? ?查看数据库中的信息,发现已经对用户密码进行加密。且即使相同的密码加密的结果也是不一样的。?
?6.用户密码加密后对登录操作进行校验
-
同步骤3在登录的service层进行注入 -
在登录的service层(或controller层)进行密码校验
/**
*
* @param admin 用户实体类
* @return
*/
public Admin login(Admin admin) {
//现获取用户名,在根据用户名查询对象
Admin adminLogin = adminDao.findByLoginname(admin.getLoginname());
//然后拿用户输入的密码和数据库中的密码匹配是否相同
//matches函数输入两个参数,第一个参数为加密的前的数据,第二个参数为加密后的数据
if(adminLogin!=null && encoder.matches(admin.getPassword(),adminLogin.getPassword())){
//登录成功
return adminLogin;
}
//登录失败
return null;
}
|