【问题标题】:Getting the IP Address Of A client For a webservice为 Web 服务获取客户端的 IP 地址
【发布时间】:2009-10-29 04:17:38
【问题描述】:

我正在使用 JAX-WS,但在检索使用 Web 服务的客户端信息时遇到问题。我发现了如何使用 JAX-RPC 和 Apache Tomcat Axis 来实现,但不知道如何使用 JAX-WS。有人对此有想法吗?

【问题讨论】:

    标签: java web-services jax-ws ip


    【解决方案1】:

    这个呢:

    @WebService
    public class MyService {
    
      @Resource
      WebServiceContext wsContext; 
    
      /**
       * Web service operation
       */ 
      @WebMethod 
      public String myMethod() { 
    
        MessageContext mc = wsContext.getMessageContext();
        HttpServletRequest req = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST); 
        System.out.println("Client IP = " + req.getRemoteAddr()); 
    
      }
    
    } 
    

    【讨论】:

    • 我想我只是错过了@Resource 注释。
    • 据我所知,这是在整个万维网上如何做到这一点的最佳描述。 ;) 谢谢你,帕斯卡!
    • 我尝试相同,但 mc 大小为 22 并且“请求”为空。我不明白为什么,你知道吗?
    • 这仅适用于 servlet 容器,但 OP 要求 JAX-WS 实现。看看this posting 有一个很好的总结来检索不同环境中的IP地址。
    【解决方案2】:

    或者这个:

    @Path("终端") 公共类终端{ @Context 私有 javax.servlet.http.HttpServletRequest hsr; @得到 @Path("get_ip") @Produces("文本/纯文本") 公共字符串 get_ip() { 返回 ip = hsr.getRemoteAddr(); } }

    【讨论】:

    • 这是否仅适用于 REST?
    【解决方案3】:

    从 Zayin 和 Darren 的回答/编辑中得到了一个巨大且值得赞赏的提示,我尝试了这个,它也有效。

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    @Path("ip")
    public String sayIP(@Context HttpServletRequest req, @QueryParam("p1") String p1, ...) {
        return req.getRemoteAddr();
    }
    

    【讨论】:

      【解决方案4】:
      public String getIp(@Context HttpServletRequest req) {
          return req.getRemoteHost();
      }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2019-11-13
      • 1970-01-01
      相关资源
      最近更新 更多