将IP地址从Spring控制器捕获到JSP

时间:2019-03-04 22:15:59

标签: java jsp

我的spring应用程序具有一个像这样的控制器:https://my.app.com/project1/token。当用户单击此链接时,我将其重定向到WEB-INF文件夹中的jsp,以从jsp收集一些客户端数据(诸如langauge,本地,时间等信息)。我也想捕获IP地址,但无法从控制器获取任何数据。这是我到目前为止的代码:

servletRequest.setAttribute("ip", servletRequest.getHeader("X-FORWARDED-FOR"));
servletRequest.getRequestDispatcher(DEVICE_INFO).forward(servletRequest, servletResponse);

在我的JSP中,我有:

console.log("IP address is - ${ip}");

但是它是空的。有更好的解决方案吗?如果我只使用servletRequest.setAttribute("ip", servletRequest.getRemoteHost());,我将获得jsp主机的IP(目前是docker,我想获取单击链接的用户的IP地址)。

1 个答案:

答案 0 :(得分:0)

X-FORWARDED-FOR仅在中间有一个代理(正在设置该标头)时设置。如果您没有代理服务器,或者代理服务器未设置该标头,那么您将一无所获。

您尝试过这样的事情吗?

  String remoteAddr = servletRequest.getHeader("X-FORWARDED-FOR");
  if (remoteAddr == null || remoteAddr.equals("")) {
      remoteAddr = servletRequest.getRemoteAddr();
  }

它适用于常规设置,不确定您的Docker设置在做什么。