【问题标题】:Unable to get remote ip and location on liferay porlets无法在 liferay 端口上获取远程 IP 和位置
【发布时间】:2023-04-30 16:52:01
【问题描述】:

我正在使用 ubuntu 12.04,liferay 版本 6.0.1,在我的系统上打开 jdk 6。我试图在java中获取远程IP和位置。为此,我找到了Host Ip 服务,通过该服务我们可以使用 apache http get 方法获取位置。我已在本地系统上成功执行此操作。但是在实际服务器上,liferay portlet 没有运行,并且由于多个实例同时运行,因此很难找到错误。服务器是基于窗口的。 我在 MVC Portlet 的 doView() 中使用此方法来获取 ip

com.liferay.portal.util.PortalUtil.getHttpServletRequest(renderRequest).getRemoteAddr()

【问题讨论】:

  • getRemoteAddr 为您提供域 IP 而不是单个系统 IP,在您运行多个 Liferay 实例并在 Internet 上可用的情况下。如果您使用负载均衡器,您将获得负载均衡器 IP,而不是单个系统 IP。
  • 那么我如何获取访问我网站的远程用户的 IP 和位置?
  • 看看这个(帖子)[liferay.com/community/forums/-/message_boards/message/1205166].不确定那家伙是否​​获得了域 IP 的系统 IP
  • 链接中没有任何有价值的东西。请提供一些准确的信息。
  • 有一个多余的 ] 结束该链接。试试liferay.com/community/forums/-/message_boards/message/1205166 - 相关:你有一个Apache作为你的生产服务器的前端吗?它可能是您作为远程地址获得的地址(特别是如果您通过 http 代理)

标签: geolocation ip liferay portlet


【解决方案1】:

当我不想访问我使用的 http 标头信息时:

HttpServletRequest httpServletRequest = PortalUtil.getHttpServletRequest(portletRequest);
HttpServletRequest originalServletRequest = PortalUtil.getOriginalServletRequest(httpServletRequest);
originalServletRequest.getRemoteAddr();

通常你无法在 httpServletRequest 中找到真正的头信息,但它们在 originalServletRequest 中可用

【讨论】:

    【解决方案2】:

    这是部分答案。我不知道答案的位置部分。希望这会有所帮助

    检查MyIP Portlet on Liferay Marketplace - 它确实有一个实用函数,它只从 RenderRequest 或 PortletRequest 对象获取 IP 地址的一部分。

    您可能有兴趣查看github source 的相同地址:IPAddressUtil.java

    【讨论】: