Vaadin 14:会话浏览器 IP 地址始终为 127.0.0.1

Vaadin 14: session browser ip address is always 127.0.0.1

我需要当前会​​话的浏览器IP地址。目前我通过 UI.getCurrent().getSession().getBrowser().getAddress() 检索这个,但这个总是 returns 127.0.0.1.

例如,应用程序打包为 tomcat 上的 Web 应用程序,使用徽章 reader 进行身份验证,并且仅在 Vaadin 会话的 IP 地址等于徽章的 IP 地址 reader。为了支持每个徽章 reader(链接到计算机 x)只能验证在具有计算机 x 的 IP 的 vaadin 会话上的操作。目前我比较徽章reader IP,192.168.xxx.xxx,和Vaadin会话浏览器IP,但是这个总是127.0.0.1,导致不匹配,没有成功认证。

如何检索真实地址,例如 192。168.xxx.xxx 地址?

getAddress() 基于 ServletRequest.getRemoteAddr() 而后者又基于与服务器的 TCP 连接。

如果服务器前面有代理、网关或负载均衡器,那么getRemoteAddr()将始终是代理发送请求的IP地址。在这种情况下,HTTP 请求中通常会有一个 X-Forwarded-For header,但是您需要通过 VaadinRequest.getCurrent() 而不是 WebBrowser [=25] 来查找值=].

如果您在本地进行测试,那么您在浏览器地址栏中输入的内容 URL 也可能会有所不同。如果你有http://localhost:8080,则服务器会将 127.0.0.1 视为原始地址。如果您改为使用开发机器的外部 IP 地址,例如http://192.168.0.2,然后服务器将看到 TCP 连接的地址。