SpringBoot+Mybatis 登录认证功能实现

864字

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
    );
}

三、关键点说明

  1. 安全增强建议

    • 🔒 密码应MD5加密存储(示例中为明文,实际项目需加密)
    • 🛡️ 增加验证码防止暴力破解
    • ⏱️ 使用JWT替代简单token实现无状态认证
  2. 接口规范

    • 请求方式: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"
}

五、扩展思考

  1. 会话管理:当前实现是简单认证,后续可引入:
    • Spring Security框架
    • Redis存储会话信息
  2. 密码安全
    1
    2
    
    // 实际存储应加密
    password = DigestUtils.md5Hex(password + salt);
    
  3. 日志审计:记录登录操作日志

六、总结

通过本次开发,我们实现了:

  • 基本的用户名密码认证流程
  • RESTful风格的登录接口
  • 前后端分离的数据交互

重点注意:当前实现是基础版本,生产环境需要加强安全措施!

如对内容有异议,请联系关邮箱2285786274@qq.com修改