feat(登录): 实现用户登录功能及相关模块

- 添加LoginController处理登录请求
- 实现UserLoginService登录逻辑,包括角色和权限验证
- 新增LoginRequest和LoginUser DTO
- 在UsersService中添加登录方法
- 添加RoleInitializer初始化系统角色
- 更新项目结构文档
- 临时禁用Spring Security配置
This commit is contained in:
qingfeng1121
2025-12-02 14:55:30 +08:00
parent 51086db30e
commit d99580f0c9
12 changed files with 351 additions and 19 deletions

View File

@@ -0,0 +1,63 @@
package com.qf.backend.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qf.backend.entity.Roles;
import com.qf.backend.service.RolesService;
import jakarta.annotation.PostConstruct;
/**
* 角色初始化配置类,用于在系统启动时创建内置角色
* @author 30803
*/
@Component
public class RoleInitializer {
private static final Logger logger = LoggerFactory.getLogger(RoleInitializer.class);
@Autowired
private RolesService rolesService;
/**
* 系统启动时初始化内置角色
*/
@PostConstruct
public void initRoles() {
logger.info("开始初始化内置角色...");
// 定义内置角色信息
String[][] roleInfos = {
{"用户", "默认用户角色", "0"}, // roleType: 0-默认用户
{"店主", "店铺管理员角色", "1"}, // roleType: 1-店主
{"管理员", "系统管理员角色", "2"} // roleType: 2-管理员
};
for (String[] roleInfo : roleInfos) {
String roleName = roleInfo[0];
String description = roleInfo[1];
Integer roleType = Integer.parseInt(roleInfo[2]);
// 检查角色是否已存在
Roles existingRole = rolesService.getOne(new QueryWrapper<Roles>().eq("role_name", roleName));
if (existingRole == null) {
// 创建新角色
Roles role = new Roles();
role.setRoleName(roleName);
role.setDescription(description);
role.setRoleType(roleType);
role.setStatus(1); // 启用状态
rolesService.save(role);
logger.info("成功创建内置角色: {}", roleName);
} else {
logger.info("内置角色 {} 已存在,跳过创建", roleName);
}
}
logger.info("内置角色初始化完成");
}
}