Skip to content

自定义IP获取拦截器 🌐

功能介绍 💡

WARNING

此拦截器主要用于解决内部系统间调用时的IP传递问题。当系统A调用系统B时,可以自定义传入客户的外网IP,避免获取到的是内网IP地址。

应用场景

  • ✓ 微服务间的IP传递
  • ✓ 内外网IP映射
  • ✓ 真实客户IP追踪
  • ✓ 跨系统调用链路追踪

配置说明 ⚙️

基础配置参数

参数名类型必填默认值说明
enabledbooleanfalse是否启用拦截器
rulesarray[object]-拦截规则列表

拦截规则配置 (rules)

参数名类型必填说明
urlsarray[string]需要拦截的接口地址列表
field-namestring请求头中的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

注意事项 ⚠️

  1. IP字段获取

    • IP字段只能从请求头(Header)获取
    • 确保field-name配置正确
    • 注意大小写敏感性
  2. URL匹配规则

    • 注意URL匹配规则的准确性
    • 使用通配符时要谨慎
    • 避免规则冲突
  3. IP格式验证

    • 考虑IP格式的合法性
    • 支持IPv4和IPv6格式
    • 处理IP地址为空的情况
  4. 安全考虑

    • 防止IP伪造攻击
    • 验证IP来源的可信度
    • 记录IP变更日志

最佳实践 💡

  1. 命名规范

    • 使用统一的IP字段名
    • 遵循命名约定
    • 避免特殊字符
  2. 安全考虑

    • 验证IP格式
    • 防止IP伪造
    • 记录IP来源

常见问题 ❓

无法获取自定义IP

排查步骤:

  1. 检查field-name是否正确
  2. 确认请求头是否包含IP字段
  3. 验证URL匹配是否生效
  4. 检查大小写是否一致

IP格式异常

解决方案:

  1. 检查IP格式是否规范
  2. 确认IP传递过程是否正确
  3. 验证是否有中间件修改
  4. 添加IP格式验证逻辑

多个规则冲突

处理方法:

  1. 检查URL匹配规则是否重叠
  2. 调整规则顺序(优先级)
  3. 使用更精确的URL匹配
  4. 避免通配符过于宽泛

性能影响

优化建议:

  1. 合理配置URL匹配范围
  2. 避免过多的规则配置
  3. 使用精确匹配而非通配符
  4. 定期清理无用规则

相关文档 📚