一尘不染

如何确定通过哪个IP地址访问了我的网站?

jsp

我有一个Web应用程序,为此,我想捕获正在访问我的网站的客户端的IP地址,以便我可以知道哪个区域是访问该应用程序最多的区域。我Java EE在我的应用程序中使用。

如果我们谈论标头以及何时request从最终用户发送,可能有一些解决方案。


阅读 377

收藏
2020-06-08

共1个答案

一尘不染

使用接口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")

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');

请阅读文档

java.lang.String getRemoteAddr() 返回发送请求的客户端或 最后一个代理 的Internet协议(IP)地址。

2020-06-08