140 lines
3.4 KiB
Markdown
140 lines
3.4 KiB
Markdown
# 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
|