WebService(JAX-WS、XFire、Axis三种)获取客户端ip
WebService(JAX-WS、XFire、Axis三種)獲取客戶端ip
JAX-WS、XFire、Axis三種webservice的獲取客戶端IP的簡單實現過程:
1,基于JDK6 jax-ws開發的webservice獲取客戶端IP地址,Endpoint.publish() 輕量級HTTP服務發布,在web容器tomcat下發布;
2,基于XFire開發的webservice獲取客戶端IP地址;
3,基于Axis開發的webservice獲取客戶端IP地址;
一、基于JDK6 jax-ws開發的webservice獲取客戶端IP地址
1,如果以?Endpoint.publish()?的方式發布:
服務端接口實現類代碼(獲取的是調用webservice的服務器的IP):
package com.micmiu.jaxws.demo.impl;import java.net.InetSocketAddress; import javax.annotation.Resource; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; import com.micmiu.jaxws.demo.HelloService; import com.sun.net.httpserver.HttpExchange; import com.sun.xml.internal.ws.developer.JAXWSProperties;@WebService() public class HelloServiceImpl implements HelloService {@Resourceprivate WebServiceContext wsContext;@WebMethodpublic String sayHello(@WebParam(name = "userName") String userName) {getClientInfo();return "";}private void getClientInfo() {try {MessageContext mc = wsContext.getMessageContext();HttpExchange exchange = (HttpExchange) mc.get(JAXWSProperties.HTTP_EXCHANGE);InetSocketAddress isa = exchange.getRemoteAddress();System.out.println("InetSocketAddress : " + isa);System.out.println("Hostname : "+ isa.getAddress().getHostAddress() + " address: "+ isa.getAddress().getHostName());} catch (Exception e) {e.printStackTrace();}} }客戶端調用后,服務端運行日志:
InetSocketAddress : /192.20.100.210:52462 Hostname : 192.20.100.210 address: ADMINIS-3HJ2002,如果以web容器的方式發布(jetty 或 tomcat為例):
服務端接口實現?代碼:
package com.micmiu.jaxws.demo2.impl;import javax.annotation.Resource; import javax.jws.WebService; import javax.servlet.http.HttpServletRequest; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; import com.micmiu.jaxws.demo2.HelloService;@WebService(endpointInterface = "com.micmiu.jaxws.demo2.HelloService") public class HelloServiceImpl implements HelloService {@Resourceprivate WebServiceContext wsContext;public String sayHello(String userName) {String clientIP = getClientInfo();return "JAX-WS with IP: " + clientIP;}private String getClientInfo() {String clientIP = null;try {MessageContext mc = wsContext.getMessageContext();HttpServletRequest request = (HttpServletRequest) (mc.get(MessageContext.SERVLET_REQUEST));clientIP = request.getRemoteAddr();System.out.println("client IP : " + clientIP);} catch (Exception e) {e.printStackTrace();}return clientIP;} }客戶端調用后,服務端運行日志:
client IP : 192.20.100.210二、基于XFire開發的webservice獲取客戶端IP地址
服務端接口實現類代碼:
package com.micmiu.xfire.demo.base;import javax.servlet.http.HttpServletRequest; import org.codehaus.xfire.transport.http.XFireServletController;public class HelloWorldServiceImpl implements HelloWorldService{public String sayHello(String username){String clientIP = getClientInfo();return "";}public String getClientInfo() {String clientIP = null;try{HttpServletRequest request = XFireServletController.getRequest();System.out.println("Addr:"+request.getRemoteAddr()+" host:"+request.getRemoteHost());clientIP = request.getRemoteAddr();}catch(Exceptione){e.printStackTrace();}return clientIP;} }客戶端調用后,服務端的日志信息如下:
Addr : 192.20.100.210 host: 192.20.100.210 客戶端IP :192.20.100.210三、Axis開發的webservice獲取客戶端IP地址
服務端代碼:
import javax.servlet.http.HttpServletRequest; import org.apache.axis.MessageContext; import org.apache.axis.transport.http.HTTPConstants;public class HelloWorld{public String sayHello(String username){String clientIP = getClientInfo();return clientIP ;}private String getClientInfo() {MessageContext mc = null;HttpServletRequest request = null;String clientIP = null;try { mc = MessageContext.getCurrentContext();request = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);clientIP = request.getRemoteAddr();System.out.println("Axis IP >>:"+clientIP);}catch (Exception e){e.printStackTrace();}return clientIP;} }
客戶端調用后,服務端的日志信息如下:
Axis IP >>:192.20.100.210?注意:
在public class AuthFr extends HttpServlet(){}這種類中是獲取不到客戶端Ip,MessageContext.getCurrentContext()值為空;--待解決
當然,如果只是獲取真實的客戶端IP可以采用request.getRemoteAddr();?
這里要獲取的是A(真實客戶端)通過訪問B(服務器B)發布的網站再訪問C(服務器C)的網站;這里服務器C上要獲取服務器B的IP;
換句話理解就是只能通過服務器B才能訪問到服務器C,其他IP都需要過濾;
這種情況,利用上訴方式在普通類中可以實現獲取服務器B的IP,但是在public class AuthFr extends HttpServlet(){}這種類中確實null;
?
?
轉載于:https://www.cnblogs.com/lizm166/p/8058715.html
總結
以上是生活随笔為你收集整理的WebService(JAX-WS、XFire、Axis三种)获取客户端ip的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017 阿里技术-年度精选
- 下一篇: 关于js css html加载顺序整理