爆米花烘焙
66.80M · 2026-04-14
如果MYSQL数据库被盗,账号密码就全没了,所以要加密。还有可能蹲号子
BCrypt特点
注册时→密码加密存储
UserController.java注册部分:
@PostMapping("/register")
public String register(@RequestBody User user) {
// 明文密码加密
String rawPassword = user.getPassword();
String encodePassword = BCrypt.hashpw(rawPassword, BCrypt.gensalt());
user.setPassword(encodePassword); // 存入加密后的密码
userService.register(user);
return "success";
}
登陆时→对比验证
重点:不能用where password=?查询!必须先查用户,再比对密码!
UserController.java登录部分:
@PostMapping("/login")
public String login(String username, String password, HttpSession session) {
// 1. 只根据用户名查用户
User user = userService.findByUsername(username);
if (user == null) {
return "fail";
}
// 2. 使用 BCrypt 校验密码(明文 vs 密文)
boolean ok = BCrypt.checkpw(password, user.getPassword());
if (ok) {
session.setAttribute("loginUser", user);
return "success";
} else {
return "fail";
}
}
UserService增加方法
public User findByUsername(String username) {
return userMapper.findByUsername(username);
}
UserMapper增加
User findByUsername(String username);
User Mapper.XML增加
<select id="findByUsername" resultType="com.example.easy_add_del_change_select.pojo.User">
select * from user where username=#{username}
</select>
$2a$10$xxxxxxx...
密码不能明文存储,必须使用 BCrypt 不可逆加密,自动加盐,每次加密结果不同,登录时通过 checkpw 方法比对,安全性极高。