我的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地址)。
答案 0 :(得分:0)
X-FORWARDED-FOR
仅在中间有一个代理(正在设置该标头)时设置。如果您没有代理服务器,或者代理服务器未设置该标头,那么您将一无所获。
您尝试过这样的事情吗?
String remoteAddr = servletRequest.getHeader("X-FORWARDED-FOR");
if (remoteAddr == null || remoteAddr.equals("")) {
remoteAddr = servletRequest.getRemoteAddr();
}
它适用于常规设置,不确定您的Docker设置在做什么。