SpringBoot+Mybatis 登录认证功能实现笔记
一、需求分析
核心目标:实现基于用户名密码的登录认证,保护系统后台安全。
功能要点:
- ✅ 用户输入用户名密码后验证
- ✅ 验证成功:返回用户信息并跳转首页
- ✅ 验证失败:提示错误信息
二、技术实现方案
1. 数据库设计
使用已有员工表emp作为认证数据源:
1
2
3
4
5
6
|
CREATE TABLE emp (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE, -- 登录用户名
password VARCHAR(32) DEFAULT '123456' NOT NULL, -- MD5加密存储更安全
...
);
|
2. 核心代码实现
2.1 实体类封装
1
2
3
4
5
6
7
8
9
|
@Data
@NoArgsConstructor
@AllArgsConstructor
public class LoginInfo {
private Integer id; // 员工ID
private String username; // 登录账号
private String name; // 真实姓名
private String token; // 认证令牌(后续扩展)
}
|
2.2 Controller层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@RestController
public class LoginController {
@Autowired
private EmpService empService;
@PostMapping("/login")
public Result login(@RequestBody Emp emp) {
LoginInfo loginInfo = empService.login(emp);
return loginInfo != null ?
Result.success(loginInfo) :
Result.error("用户名或密码错误");
}
}
|
2.3 Service层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@Service
public class EmpServiceImpl implements EmpService {
@Override
public LoginInfo login(Emp emp) {
// 查询数据库验证
Emp dbEmp = empMapper.getByUsernameAndPassword(
emp.getUsername(),
emp.getPassword()
);
return dbEmp != null ?
new LoginInfo(dbEmp.getId(), dbEmp.getUsername(),
dbEmp.getName(), null) :
null;
}
}
|
2.4 Mapper层
1
2
3
4
5
6
7
8
|
@Mapper
public interface EmpMapper {
@Select("SELECT * FROM emp WHERE username=#{username} AND password=#{password}")
Emp getByUsernameAndPassword(
@Param("username") String username,
@Param("password") String password
);
}
|
三、关键点说明
-
安全增强建议:
- 🔒 密码应MD5加密存储(示例中为明文,实际项目需加密)
- 🛡️ 增加验证码防止暴力破解
- ⏱️ 使用JWT替代简单token实现无状态认证
-
接口规范:
- 请求方式:
POST /login
- 请求参数:
{"username":"admin", "password":"123456"}
- 成功响应:
1
2
3
4
5
6
7
8
9
10
|
{
"code": 1,
"msg": "success",
"data": {
"id": 1,
"username": "admin",
"name": "管理员",
"token": "..."
}
}
|
四、测试验证
测试用例
| 测试场景 |
预期结果 |
| 正确用户名密码 |
返回200,包含用户信息 |
| 错误密码 |
返回错误提示 |
| 不存在的用户名 |
返回错误提示 |
API测试示例
1
2
3
4
5
6
7
|
POST http://localhost:8080/login
Content-Type: application/json
{
"username": "admin",
"password": "123456"
}
|
五、扩展思考
- 会话管理:当前实现是简单认证,后续可引入:
- Spring Security框架
- Redis存储会话信息
- 密码安全:
1
2
|
// 实际存储应加密
password = DigestUtils.md5Hex(password + salt);
|
- 日志审计:记录登录操作日志
六、总结
通过本次开发,我们实现了:
- 基本的用户名密码认证流程
- RESTful风格的登录接口
- 前后端分离的数据交互
重点注意:当前实现是基础版本,生产环境需要加强安全措施!