如何在 Java 中使用 RESTful Web 服务获取远程/客户端 IP 地址?

Posted

技术标签:

【中文标题】如何在 Java 中使用 RESTful Web 服务获取远程/客户端 IP 地址?【英文标题】:How to get Remote / Client IP address using RESTful web service in java? 【发布时间】:2012-12-24 16:01:43 【问题描述】:

我在我的项目中写了Rest web service。web service调用可能来自不同的机器。所以我需要通过REST webservice找出IP地址。

从这个link request.getRemoteAddr() 使用这个。

但我不能使用 getRemoteAddr()。因为我的请求和响应都是xml格式的。

我在 REST 服务中使用了 post 方法。Tomcat 服务器。我以 xml 格式发送请求。

如何获取IP地址?

【问题讨论】:

您能说出您使用的是什么技术/框架吗? 【参考方案1】:

无论您的请求的格式(或内容类型)如何(在本例中为 xml) IP 地址随您的请求一起提供,通过该 IP 地址提交 xml 有效负载(请求)。 因此,检查您的请求是最好的方法。

【讨论】:

您的请求数据 (xml) 始终包含在 HTTP 请求中【参考方案2】:

即使您的请求是 xml/json 格式,您也会使用 request.getRemoteAddr(); 获取远程/客户端计算机地址,因为 IP 地址位于 HTTP Request header。

【讨论】:

我无法通过xml请求对象获取getRemoteAddr()。【参考方案3】:

假设您使用的是 JAX-RS:

@GET
Produces("application/xlm")
public String getData(@Context HttpServletRequest request)
   String ip = request.getRemoteAddr();

@Context 注解允许您注入

的实例 javax.ws.rs.core.HttpHeaders, javax.ws.rs.core.UriInfo, javax.ws.rs.core.Request, javax.servlet.HttpServletRequest, javax.servlet.HttpServletResponse, javax.servlet.ServletConfig, javax.servlet.ServletContext,和 javax.ws.rs.core.SecurityContext 对象。

【讨论】:

以上是关于如何在 Java 中使用 RESTful Web 服务获取远程/客户端 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章

用 Java 技术创建 RESTful Web 服务/@Path@Produces@PathParam

如何使用 RESTful Web 服务创建异步通知系统?

如何从Android调用RESTful Web服务?

如何从 android 调用 RESTful Web 服务?

Java Web学习总结(43)—— Restful API 版本控制

Java Web学习总结(43)—— Restful API 版本控制