3

从 dspace 下载比特流时,我想捕获用户的 IP 地址。我已经使用以下代码成功捕获了用户的“全名”:

        EPerson loggedin = context.getCurrentUser();
        String eperson = null;
        if (loggedin != null)
        {
            eperson = loggedin.getFullName();
        }
        else eperson = "Anonymous";

现在,我还想像从Control panel > Current Activity中看到的那样捕获 IP 地址。请告知我该如何实现这一目标以及我应该使用什么方法?

编辑: 我将在封面页功能中实现这一点(在 DSpace 5,xmlui 中可用),如果用户没有登录或者是匿名用户(例如通过 [用户的 IP 地址] 下载),将显示用户的 IP 地址下载 PDF 时。来自Taylor 和 Francis的带有封面的 PDF 示例。请注意文章封面的第一行:本文的下载者:[您的 IP 地址]

请注意,我在 Java 方面的知识非常有限,并且很乐意感谢任何建议和帮助。

提前致谢。

更新

我尝试使用这篇文章的答案,但是当我进行 mvn 构建时,我遇到了这个错误:

method getClientIpAddr in class CoverPage cannot be applied to given types;
[ERROR] required: javax.servlet.http.HttpServletRequest
[ERROR] found: no arguments

如果您能帮我解决这个问题,我将不胜感激,我删除了对这篇文章的回答,因为它将返回服务器的外部 IP,而不是客户端的 IP 地址。

4

1 回答 1

2

从 HttpServletRequestrequest.getRemoteAddr() 示例中获取它:https ://github.com/DSpace/DSpace/blob/master/dspace-api/src/main/java/org/dspace/statistics/SolrLogger.java#L298

在 xmlui 中,如果您有一个 objectmodel 映射(例如AbstractDSpaceTransformerAction有它),您可以从ObjectModelHelper.getRequest(objectmodel). ObjectModelHelper为您提供了一个org.apache.cocoon.environment.Request具有该getRemoteAddr()方法的对象,因为它扩展了javax.servlet.http.HttpServletRequest.

于 2015-02-12T15:22:36.067 回答