2009-10-29 136 views
20

JAX-WSを使用していますが、Webサービスを使用しているクライアント情報を取得できません。 JAX-RPCやApache Tomcat AxisでJAX-WSを使用する方法を見つけましたが、JAX-WSでは使用できませんでした。誰かがこれについての考えを持っていますか?クライアントのIPアドレスを取得するWebサービスの場合

@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()); 

    } 

} 

答えて

47

 
@Path("terminal") 
public class terminal { 
    @Context private javax.servlet.http.HttpServletRequest hsr; 
    @GET 
    @Path("get_ip") 
    @Produces("text/plain") 
    public String get_ip() 
    { 
      return ip = hsr.getRemoteAddr(); 
    } 
} 
+2

私はちょうど@Resourceアノテーションを逃したと思います。 – monksy

+0

私の知る限りでは、これはワイドウェブ全体でこれを行う方法の最良の説明です。 ;)ありがとう、パスカル! – Zakum

+0

同じですがサイズは22ですが、 "request"はnullです。なぜ、理解できないのですか? – luffy

4

またはこの:このことについて

+0

これはRESTにのみ適用できますか? – Koekiebox

2

がZayinとダレンの答え/編集から巨大なと感謝のヒントを取って、私はこれを試みたが、それはあまりにも動作します。

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

@Contextを特定することはできません。インポートは提案されていませんが、これは正確には何ですか? –

+0

@ united-expression、https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/core/Context.html、https://jersey.java.net/documentation/ latest/jaxrs-resources.html –

関連する問題