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

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

现在,我也想捕获IP地址,就像从控制面板> 当前 Activity 中看到的一样。请告知我该如何实现以及应使用哪种方法?

编辑:
我将在封面功能(在DSpace 5中,xmlui中提供)中实现此功能,如果用户未登录或是匿名用户,则将在其中显示用户的IP地址(例如,通过[用户的IP地址]下载) PDF。带Taylor and Francis封面的PDF示例。请注意文章封面的第一行:本文的下载者:[您的IP地址]

请注意,我对Java的了解非常有限,将非常感谢任何建议和帮助。

提前致谢。

更新

我尝试从此answer使用post,但是当我执行mvn构建时,出现此错误:
method getClientIpAddr in class CoverPage cannot be applied to given types;
[ERROR] required: javax.servlet.http.HttpServletRequest
[ERROR] found: no arguments

如果您能为我提供帮助,我们将不胜感激,并且我删除了本文的答案,因为它将返回服务器的外部IP而不是客户端的IP地址。

最佳答案

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

在xmlui中,如果您有一个对象模型映射(例如AbstractDSpaceTransformerAction拥有它),则可以从ObjectModelHelper.getRequest(objectmodel)获取请求。 ObjectModelHelper给您一个org.apache.cocoon.environment.Request对象,该对象具有getRemoteAddr()方法,因为它扩展了javax.servlet.http.HttpServletRequest

10-06 14:52