我有一个Web应用程序,为此,我想捕获正在访问我的网站的客户端的IP地址,以便我可以知道哪个区域是访问该应用程序最多的区域。我Java EE在我的应用程序中使用。
Java EE
如果我们谈论标头以及何时request从最终用户发送,可能有一些解决方案。
request
使用接口ServletRequest中的方法getRemoteAddr()或接口HttpServletRequest中的方法getHeaders():
HttpServletRequest httpRequest = (HttpServletRequest) request; String userIpAddress = httpRequest.getHeader("X-Forwarded-For");
使用方法getRemoteAddr有一个警告:
当然,您可以使用该方法,并且在一般情况下,您将获得客户端的IP。但是,如果用户位于代理之后,则该方法无用。在这种情况下,您将获得代理服务器的IP地址,而不是客户端。但是代理可以在特殊的HTTP标头中包含发出请求的客户端IP 。因此要检索real-client-IP调用方法getHeader("X-Forwarded-For")。
HTTP
getHeader("X-Forwarded-For")
JSP中的示例用法:
在使用JSTL的会话中使用IP地址的设置值:
<c:set var="userIp" value="${requestScope.header('x-forwarded-for')}" scope="session" />
然后在方便的位置从会话中获取此值。
在JSP中,您可以将<c:out value="${sessionScope.userIp}" />或在servlet中用作session.getAttribute('userIp');
<c:out value="${sessionScope.userIp}" />
session.getAttribute('userIp');
请阅读文档:
java.lang.String getRemoteAddr() 返回发送请求的客户端或 最后一个代理 的Internet协议(IP)地址。