当前位置: 首页 > 知识库问答 >
问题:

如何从弹性豆茎中的Spring Boot应用程序中获取客户端主机名和/或客户端IP地址?

房唯
2023-03-14

我在AWS Elastic Beanstek中部署了一个Spring Boot应用程序。

对于我的一个API,我需要检查客户端主机名地址。

我正在使用

String ipAddress = request.getRemoteAddr();
String hostname = request.getRemoteHost();

(其中RequestHttpServletRequest)。

我知道HTTP规范和Java servlet规范都说这两个值可能都不存在。然而,我看到,每次两者的值都是“127.0.0.1”。

我假设Elastic Beansta的设置方式,对VM的所有请求都来自内部。有没有办法从内部检索客户端地址标头?

如果我使用CloudFront终止HTTPS,有没有办法让它通过客户端地址?

共有1个答案

索瀚海
2023-03-14

这个问题的基本答案是AWS Elastic Beanstalk通过本地代理获取请求。CloudFront还充当反向代理。

解决方案是在请求上使用X-Forwarded-For标头。

这是HTTP代理服务器使用的事实上的标准标头。

这是一个多值头-由沿途的每个代理填充。第一个条目是实际的远程客户端地址。后续值适用于代理主机。

<代码>请求。getHeader(“X-Forwarded-For”)将为您提供原始值。

request.get标头("X-Forwarded-For")会给你一个枚举

[1]枚举是一个接口——最常见的实现是Vector。迭代如下

Enumeration<String> headers = ...;

while (headers.hasMoreElements()) {
  String header =  headers.nextElement();
  // TODO: process header ...
}

 类似资料:
  • get_client_ip($type = 0, $adv = false) 功能 获取客户端IP地址 参数 $type: string 返回类型 0 返回IP地址 1 返回IPV4地址数字 $adv: boolean 是否进行高级模式获取(有可能被伪装) 返回 string 客户端IP地址

  • 问题内容: 是否可以在Node.js中获取 主机名 ? 这是我获取客户IP的方式: 那么,如何获得客户的主机名? 谢谢您的回复! 问题答案: 我认为唯一的方法是这样的: 但我建议您实际上并不需要它,这并不是您可以对信息做任何有用的事情。如果您只想让字符串标识用户的计算机,则可以进行一些处理。 如果您真正想要的是FQDN,那么我建议它仍然对您没有太大帮助,但为此您需要反向DNS查找。如果您使用的是V

  • get_client_ip($type = 0, $adv = false) 功能 获取客户端IP地址 参数 $type: string 返回类型 0 返回IP地址 1 返回IPV4地址数字 $adv: boolean 是否进行高级模式获取(有可能被伪装) 返回 string 客户端IP地址

  • 问题内容: 我需要知道客户的IP地址,这是我的鳕鱼 处理程序: 结果: 为什么我无法获得真正的客户IP? 问题答案: 通常,您可以用来获取正在访问Web应用程序的客户端的IP地址。但是,如果用户位于代理服务器后面或通过负载均衡器访问您的Web服务器(例如,在云托管中),则上述代码段将获取代理服务器或负载均衡器服务器的IP地址,而不是原始IP地址客户。 因此,您应该获得请求的HTTP标头“ X-Fo

  • 问题内容: 在Node.js服务器中使用socket.IO时,是否有一种简单的方法来获取传入连接的IP地址?我知道您可以从标准的HTTP连接中获得它,但是socket.io有点不同。 问题答案: 好的,从0.7.7版本开始可用,但是不像lubar所描述的那样。我最终需要通过git hub上的一些提交日志来解析该问题,但是下面的代码现在确实对我有用:

  • 问题内容: 我正在尝试开发一个Java Web应用程序(Servlet),该服务器需要获取客户端IP地址。 以下是我到目前为止的代码: 在大多数情况下,我会得到“默认网关地址”(147.120.1.5)。不是我的机器IP地址(174.120.100.17)。 在大多数情况下,我会得到“默认网关地址”(147.120.1.5)。不是我的机器IP地址(174.120.100.17)。 在这种情况下,我