外观
自定义IP获取拦截器 🌐
功能介绍 💡
WARNING
此拦截器主要用于解决内部系统间调用时的IP传递问题。当系统A调用系统B时,可以自定义传入客户的外网IP,避免获取到的是内网IP地址。
应用场景
- ✓ 微服务间的IP传递
- ✓ 内外网IP映射
- ✓ 真实客户IP追踪
- ✓ 跨系统调用链路追踪
配置说明 ⚙️
基础配置参数
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
enabled | boolean | 否 | false | 是否启用拦截器 |
rules | array[object] | 是 | - | 拦截规则列表 |
拦截规则配置 (rules)
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
urls | array[string] | 是 | 需要拦截的接口地址列表 |
field-name | string | 是 | 请求头中的IP字段名称 |
TIP
URL匹配规则详见 URL匹配规则说明
配置示例 📝
基础配置
yaml
gateway:
filter:
custom-ip:
enabled: true
rules:
- field-name: client-ip
urls:
- /sso/oauth/logout
- /sso/oauth/getAccountInfo
- /sso/oauth/getDictList
多规则配置
yaml
gateway:
filter:
custom-ip:
enabled: true
rules:
- field-name: client-ip
urls:
- /sso/oauth/**
- field-name: x-real-ip
urls:
- /api/**
使用说明 📌
1. 发送请求方
http
GET /sso/oauth/getAccountInfo HTTP/1.1
Host: example.com
client-ip: 203.0.113.1
2. 接收方获取IP
java
String clientIp = request.getHeader("client-ip");
3. 多层代理环境示例
http
GET /api/user/profile HTTP/1.1
Host: api.example.com
x-real-ip: 203.0.113.1
x-forwarded-for: 203.0.113.1, 192.168.1.100
x-client-ip: 203.0.113.1
注意事项 ⚠️
IP字段获取
- IP字段只能从请求头(Header)获取
- 确保field-name配置正确
- 注意大小写敏感性
URL匹配规则
- 注意URL匹配规则的准确性
- 使用通配符时要谨慎
- 避免规则冲突
IP格式验证
- 考虑IP格式的合法性
- 支持IPv4和IPv6格式
- 处理IP地址为空的情况
安全考虑
- 防止IP伪造攻击
- 验证IP来源的可信度
- 记录IP变更日志
最佳实践 💡
命名规范
- 使用统一的IP字段名
- 遵循命名约定
- 避免特殊字符
安全考虑
- 验证IP格式
- 防止IP伪造
- 记录IP来源
常见问题 ❓
无法获取自定义IP
排查步骤:
- 检查field-name是否正确
- 确认请求头是否包含IP字段
- 验证URL匹配是否生效
- 检查大小写是否一致
IP格式异常
解决方案:
- 检查IP格式是否规范
- 确认IP传递过程是否正确
- 验证是否有中间件修改
- 添加IP格式验证逻辑
多个规则冲突
处理方法:
- 检查URL匹配规则是否重叠
- 调整规则顺序(优先级)
- 使用更精确的URL匹配
- 避免通配符过于宽泛
性能影响
优化建议:
- 合理配置URL匹配范围
- 避免过多的规则配置
- 使用精确匹配而非通配符
- 定期清理无用规则