Spring Boot 注册登录接口进阶(bcrypt密码加密 + Apifox 测试)
目录
- 🍧一、完成“用户注册接口”(POST 请求)
- 1. 准备阶段
- 2. 创建结构(按层分包)
- 3. 核心代码步骤
- 4. 测试
- 🍧二、完成"登录接口"+密码加密(bcrypt)
- 1. 引入依赖
- 2. 在注册时加入密码
- 3. 实现登录接口
- 4. 测试
本篇博客基于新建项目且连接好数据库。
学习内容可接我的上一篇博客,按学习顺序写的。
🔅提前看:
本部分使用 Spring Boot 实现用户注册与登录接口,通过 BCrypt 加密密码保障安全,并用 Apifox 进行接口测试。
🍧一、完成“用户注册接口”(POST 请求)
目标:能通过前端 / Postman 向后端发送注册信息,并把用户存进数据库。
1. 准备阶段
-
新建一个 Spring Boot 项目(已经建好就跳过)。
-
确保有:
application.yml 或 application.properties
数据库(MySQL)连接成功
表结构 user(id, username, password, email)
示例 SQL:
CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,password VARCHAR(100) NOT NULL,email VARCHAR(100)
);
2. 创建结构(按层分包)
com.example.demo┣ controller → 接口层┣ service → 业务逻辑层┣ mapper → 数据库交互层(MyBatis)┗ entity → 实体类
3. 核心代码步骤
- User实体类
@Data
public class User {private Integer id;private String username;private String password;private String email;
}
- UserMapper 接口
@Mapper
public interface UserMapper {@Insert("INSERT INTO user(username,password,email) VALUES(#{username},#{password},#{email})")int insert(User user);
}
- UserService
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public void register(User user) {userMapper.insert(user);}
}
- UserController
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")public String register(@RequestBody User user) {userService.register(user);return "注册成功";}
}
4. 测试
- 使用apifox创建post接口(具体步骤可以问ai),接口信息如下:

- 填写请求体
"username": "xiaomiao","password": "123456","email": "test@qq.com"
}
- 发送请求+验证
成功 返回200

数据库中数据插入成功:

🍧二、完成"登录接口"+密码加密(bcrypt)
1. 引入依赖
//pom.xml<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-crypto</artifactId></dependency>
只引入其加密模块而不是整个安全框架,这个不会引入登录拦截、权限控制,只带加密功能,非常轻量。(否则会登录拦截,稍为复杂)
2. 在注册时加入密码
// UserService
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;public void register(User user) {BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();user.setPassword(encoder.encode(user.getPassword()));userMapper.insert(user);
}
3. 实现登录接口
// Mapper
@Select("SELECT * FROM user WHERE username = #{username}")
User findByUsername(String username);
// Service
public boolean login(String username, String rawPassword) {User dbUser = userMapper.findByUsername(username);if (dbUser == null) return false;BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();return encoder.matches(rawPassword, dbUser.getPassword());
}
// Controller
@PostMapping("/login")
public String login(@RequestBody User user) {boolean success = userService.login(user.getUsername(), user.getPassword());return success ? "登录成功" : "用户名或密码错误";
}
4. 测试
这里要新创建一个用户,再用这个用户登录。不能用加密模块之前的用户。
因为未加密前数据库存的明文(加密模块加入后密码校验不通过),加密后存的哈希。
