【发布时间】:2015-04-11 06:02:59
【问题描述】:
我想在从 dspace 下载比特流时捕获用户的 IP 地址。我已使用此代码成功捕获了用户的“全名”:
EPerson loggedin = context.getCurrentUser();
String eperson = null;
if (loggedin != null)
{
eperson = loggedin.getFullName();
}
else eperson = "Anonymous";
现在,我还想像从 控制面板 > 当前活动中看到的那样捕获 IP 地址。请告知我该如何实现这一目标以及我应该使用什么方法?
编辑: 我将在封面页功能中实现这一点(在 DSpace 5,xmlui 中可用),如果用户没有登录或者是匿名用户(例如通过 [用户的 IP 地址] 下载),则在下载时将显示用户的 IP 地址PDF。带有来自Taylor and Francis 的封面的 PDF 示例。请注意文章封面的第一行:这篇文章的下载者:[您的 IP 地址]。
请注意,我对 java 的了解非常有限,如果有任何建议和帮助,我将很高兴。
提前致谢。
更新
我尝试使用 post 中的 answer,但是当我进行 mvn 构建时,我遇到了这个错误:
method getClientIpAddr in class CoverPage cannot be applied to given types;
[ERROR] required: javax.servlet.http.HttpServletRequest
[ERROR] found: no arguments
如果你能帮我解决这个问题,我将不胜感激,我删除了我对这篇文章的回答,因为它会返回服务器的外部 IP,而不是客户端的 IP 地址。
【问题讨论】:
-
在查看返回 ip 地址的 java 方法之前,我想澄清一些事情。您是在编写将在下载发生时运行的代码,还是在编写代码来报告过去的下载?每次下载的 IP 地址都记录在 solr 统计记录中。您可以构造一个 solr 查询来查找这些记录并通过 ip 地址对结果进行分面。你有能力查询你的 solr 统计 repo 吗?
-
@terrywb,我正在编写的代码是用于封面功能的,因此这意味着下载发生。我想在引文封面页中显示正在下载该比特流的用户的 IP 地址。如果登录,我已成功捕获用户名。我的目标是如果该用户是匿名的,我将只显示他/她的 IP 地址,就像来自 JSTOR 的那些(请参阅封面页脚)。谢谢