Java ip地址的应用程序引擎请求标头

Java ip地址的应用程序引擎请求标头,java,google-app-engine,http,servlets,request,Java,Google App Engine,Http,Servlets,Request,我有一个运行RESTWeb服务的应用程序引擎应用程序。 我想从我的web服务处理的所有请求中提取ip地址 从javax.servlet.http.HttpServletRequest中,我试图提取ip地址,检查“X-Real-ip”,如果为空或“未知”,则检查“X-Forwarded-For”头列表中的第一个ip,如果为空或“未知”,则从请求中获取它。getRemoteAddr() 我以为我涵盖了所有的案例,但我仍然得到了像10.x.x.x、127.0.0.1或未知的ip地址 我知道应用程序引擎

我有一个运行RESTWeb服务的应用程序引擎应用程序。 我想从我的web服务处理的所有请求中提取ip地址

从javax.servlet.http.HttpServletRequest中,我试图提取ip地址,检查“X-Real-ip”,如果为空或“未知”,则检查“X-Forwarded-For”头列表中的第一个ip,如果为空或“未知”,则从请求中获取它。getRemoteAddr()

我以为我涵盖了所有的案例,但我仍然得到了像10.x.x.x、127.0.0.1或未知的ip地址

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

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

知道要检查的其他标题吗

thx

的答案可能会对你有所帮助。有许多要检查的标题:

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" };

内部请求(cron、queue等)来自
10.x.x.x
btwthx进行应答,但我指的是直接呼叫(没有cron或队列呼叫)。您是否使用云端点?如果是这样的话,您的请求没有原始IP是有意义的。我没有使用端点,我使用Spring公开了一个rest Web服务。谢谢您的回答。在下一个应用程序版本中,我将在生产中记录所有这些带有和不带
HTTP的头文件,并检查实际的客户端ip地址存储在哪里。除了链接的答案外,我还可以添加检查
ipAddress.startsWith(“192”)| | ipAddress.startsWith(“192”)
,以避免使用本地网络ip地址。我很确定我的错误是在
request.getRemoteAddr()之前检查
X-Real-IP
X-Real-IP
。如果我发现与此相关,我会接受答案。