# 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