从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中,如果您有一个对象模型映射(例如AbstractDSpaceTransformer或Action拥有它),则可以从ObjectModelHelper.getRequest(objectmodel)
获取请求。 ObjectModelHelper给您一个org.apache.cocoon.environment.Request
对象,该对象具有getRemoteAddr()
方法,因为它扩展了javax.servlet.http.HttpServletRequest
。