JAX-WSを使用していますが、Webサービスを消費しているクライアント情報を取得できません。 JAX-RPCとApache Tomcat Axisでそれを行う方法を見つけましたが、JAX-WSではできません。誰かこれについて考えがありますか?
これはどうですか:
@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());
}
}
またはこれ:
@ 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() ; } }
ZayinとDarrenの回答/編集から膨大で高く評価されたヒントを取り入れて、私はこれを試しましたが、それもうまくいきます。
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("ip")
public String sayIP(@Context HttpServletRequest req, @QueryParam("p1") String p1, ...) {
return req.getRemoteAddr();
}
public String getIp(@Context HttpServletRequest req) {
return req.getRemoteHost();
}