# ERP API Gateway

基于Spring Cloud Gateway的统一API网关

## 功能特性

- ✅ **Nacos服务发现** - 自动注册与发现微服务
- ✅ **动态路由** - 支持Nacos配置中心的动态路由更新
- ✅ **JWT认证** - 统一认证鉴权
- ✅ **Sentinel限流熔断** - 保护下游服务
- ✅ **Redis分布式限流** - 基于令牌桶算法
- ✅ **统一日志** - 请求/响应完整日志
- ✅ **跨域处理** - CORS配置

## 项目结构

```
gateway/
├── pom.xml
├── src/main/
│   ├── java/com/erp/gateway/
│   │   ├── GatewayApplication.java
│   │   ├── config/
│   │   │   ├── GatewayConfig.java      # 网关配置
│   │   │   ├── CorsConfig.java         # 跨域配置
│   │   │   ├── SecurityConfig.java    # 安全配置
│   │   │   ├── JwtUtil.java           # JWT工具类
│   │   │   └── RateLimitConfig.java   # 限流Key配置
│   │   ├── filter/
│   │   │   ├── AuthFilter.java       # 认证过滤器
│   │   │   └── LogFilter.java         # 日志过滤器
│   │   ├── handler/
│   │   │   └── JsonErrorHandler.java  # JSON错误处理
│   │   └── sentinel/
│   │       └── SentinelConfig.java    # Sentinel配置
│   └── resources/
│       ├── application.yml            # 主配置
│       ├── bootstrap.yml              # Nacos引导配置
│       ├── logback-spring.xml         # 日志配置
│       └── nacos/
│           └── gateway-config.yml     # Nacos中心化配置
└── docker/
    ├── Dockerfile
    └── docker-compose.yml
```

## 快速开始

### 环境要求

- JDK 17+
- Maven 3.8+
- Redis
- Nacos 2.x
- Sentinel Dashboard

### 构建

```bash
mvn clean package -DskipTests
```

### 运行

```bash
java -jar target/gateway-1.0.0.jar
```

### Docker部署

```bash
cd docker
docker-compose up -d
```

## 环境变量

| 变量 | 默认值 | 说明 |
|------|--------|------|
| NACOS_SERVER | localhost:8848 | Nacos地址 |
| NACOS_USERNAME | nacos | Nacos用户名 |
| NACOS_PASSWORD | nacos | Nacos密码 |
| REDIS_HOST | localhost | Redis地址 |
| REDIS_PORT | 6379 | Redis端口 |
| JWT_SECRET | - | JWT密钥(256位) |
| SENTINEL_DASHBOARD | localhost:8080 | Sentinel控制台 |
| GATEWAY_PORT | 8080 | 网关端口 |

## 路由配置

| 服务 | 路径 | 下游服务 |
|------|------|----------|
| 认证服务 | /api/auth/** | erp-auth |
| 用户服务 | /api/user/** | erp-user |
| 订单服务 | /api/order/** | erp-order |
| 商品服务 | /api/product/** | erp-product |
| 仓库服务 | /api/warehouse/** | erp-warehouse |

## API端点

### 认证

- `POST /api/auth/login` - 用户登录
- `POST /api/auth/register` - 用户注册
- `POST /api/auth/refresh` - 刷新Token

### 健康检查

- `GET /actuator/health` - 健康状态

## JWT认证

请求头格式：
```
Authorization: Bearer <token>
```

下游服务可获取的头部：
- `X-User-Name` - 用户名
- `X-User-Roles` - 用户角色(逗号分隔)

## 限流策略

| API | QPS限制 |
|-----|---------|
| /api/auth/** | 200 |
| /api/user/** | 100 |
| /api/order/** | 100 |
| /api/product/** | 100 |
| /api/warehouse/** | 100 |

## 监控

- **Actuator**: `/actuator/gateway`, `/actuator/health`
- **Sentinel**: 连接Sentinel Dashboard查看实时数据

## License

MIT
