我想从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地址。
答案 0 :(得分:2)
从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
。