Java 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 的答案可能会对你有所帮助。有许多要检查的标题: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地址 我知道应用程序引擎
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
。如果我发现与此相关,我会接受答案。