# emp **Repository Path**: sup4ever/emp ## Basic Information - **Project Name**: emp - **Description**: 企业员工管理系统 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-19 - **Last Updated**: 2025-04-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 员工管理系统 ## 项目简介 本项目是一个基于Spring Boot的员工管理系统,提供员工信息管理、部门管理、用户权限管理等功能。 ## 系统架构 ### 技术栈 - **后端**:Spring Boot + MyBatis-Plus + Sa-Token - **数据库**:MySQL - **缓存**:Redis - **文档**:Knife4j (Swagger) ### 项目结构 ``` src/main/java/com/example/ ├── annotation // 自定义注解 ├── aspect // AOP切面 ├── common // 通用类 │ ├── api // API响应封装 │ ├── exception // 异常处理 ├── config // 配置类 ├── controller // 控制器 ├── dto // 数据传输对象 ├── entity // 实体类 ├── enums // 枚举类 ├── filter // 过滤器 ├── interceptor // 拦截器 ├── mapper // MyBatis映射接口 ├── service // 服务接口 │ └── impl // 服务实现 └── utils // 工具类 ``` ## 请求日志记录方案 本系统采用轻量级的请求日志记录方案,主要通过以下组件实现: ### 1. 请求日志过滤器 (RequestLoggingFilter) ```java @Slf4j @Component @Order(1) public class RequestLoggingFilter implements Filter { // ... } ``` 该过滤器拦截所有HTTP请求,记录以下信息: - 请求URI、方法、IP地址 - 请求开始和结束时间 - 请求参数 - 执行耗时 - 用户信息(如果已登录) - 异常信息(如果发生) ### 2. 日志配置 (logback-spring.xml) ```xml ${LOG_HOME}/request.log ``` - 日志按天切割,保留30天历史记录 - 请求日志单独保存在request.log文件中 - 日志格式包含时间戳、请求ID和详细信息 ### 3. 操作日志注解 (@Log) ```java @Target({ ElementType.PARAMETER, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Log { String title() default ""; BusinessType businessType() default BusinessType.OTHER; // ... } ``` - 用于标记需要记录详细操作日志的方法 - 通过AOP切面实现,记录请求参数和返回结果 - 支持区分业务类型(新增、修改、删除等) ## 用户认证方案 本系统采用基于JWT的认证方案,通过Sa-Token框架实现: ### 1. JWT令牌拦截器 (JwtTokenInterceptor) ```java @Slf4j @Component public class JwtTokenInterceptor implements HandlerInterceptor { // ... } ``` 该拦截器实现以下功能: - 拦截所有需要认证的请求 - 验证JWT令牌的有效性 - 解析用户信息并放入请求上下文 - 白名单机制,允许部分路径无需认证 白名单配置: ```java private static final String[] WHITE_LIST = { "/lzw/auth/login", "/lzw/auth/captcha", // Swagger相关路径 // ... }; ``` ### 2. 用户信息获取工具 (RequestUserHolder) ```java public class RequestUserHolder { public static Long getUserId() { // ... } public static String getUsername() { // ... } // ... } ``` - 提供静态方法获取当前登录用户信息 - 适用于控制器、服务层和其他组件 - 简化用户信息的获取流程 ### 3. 接口使用示例 ```java @RestController @RequestMapping("/lzw/employee") public class EmployeeController { @GetMapping("/list") public ApiResult> list() { // 获取当前用户ID Long userId = RequestUserHolder.getUserId(); // 业务逻辑 // ... } } ``` ## 全局配置 ### 全局上下文路径 系统配置了全局上下文路径 `/lzw`,所有API接口都以此为前缀: ```yaml server: port: 8080 servlet: context-path: /lzw ``` ### 统一响应格式 所有API接口返回统一的JSON格式: ```json { "code": 200, "message": "操作成功", "data": { /* 数据内容 */ } } ``` 错误响应示例: ```json { "code": 500, "message": "操作失败", "data": null } ``` ## 项目启动 ### 依赖安装 ```bash mvn clean install ``` ### 运行项目 ```bash mvn spring-boot:run ``` ### 访问接口文档 ``` http://localhost:8080/lzw/doc.html ``` ## 注意事项 1. 确保MySQL和Redis服务已启动 2. 项目首次启动会初始化数据库表结构 3. 默认管理员账号:admin / 123456