用于IP地址的应用引擎请求标头

Akl*_*UIG 5 java google-app-engine servlets http request

我有一个运行REST Web服务的应用程序引擎应用程序.我想从我的Web服务处理的所有请求中提取IP地址.

来自javax.servlet.http.HttpServletRequest我正在尝试提取检查"X-Real-IP"的IP地址,如果为空或"未知",则检查"X-Forwarded-For"标题列表中的第一个ip空或"未知"从request.getRemoteAddr()获取它.

我以为我覆盖了所有的情况,但我仍然得到像10.xxx,或127.0.0.1或未知的IP地址.

我知道应用程序引擎应用程序正在负载均衡器后面运行,实例是动态的,我当然在请求中省略了一个标题,因为我可以在日志中看到原始的IP地址(来自谷歌).

编辑:我正在处理的所有请求都是直接请求服务(没有队列或cron请求).

想知道其他标题要检查吗?

谢谢 .

Luk*_*kas 2

这个问题的答案可能对你有帮助。有很多标头需要检查:

private static final String[] HEADERS_TO_TRY = { 
    "X-Forwarded-For",
    "Proxy-Client-IP",
    "WL-Proxy-Client-IP",
    "HTTP_X_FORWARDED_FOR",
    "HTTP_X_FORWARDED",
    "HTTP_X_CLUSTER_CLIENT_IP",
    "HTTP_CLIENT_IP",
    "HTTP_FORWARDED_FOR",
    "HTTP_FORWARDED",
    "HTTP_VIA",
    "REMOTE_ADDR" };
Run Code Online (Sandbox Code Playgroud)