如何在dspace中捕获用户IP地址?

时间:2015-02-11 00:45:07

标签: java dspace

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

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

现在,我还要捕获IP地址,就像从控制面板>中看到的那样。 当前活动。请告知我如何实现这一目标以及我应该使用哪些方法?

修改 我将在封面功能(在DSpace 5,xmlui中提供)中实现此功能,如果用户未登录或是匿名用户,将显示用户的IP地址(例如,通过[用户&#39下载] ; s 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地址。

1 个答案:

答案 0 :(得分:2)

从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