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-3HJ200

2,如果以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相关推荐

  1. JAVA CXF、XFIRE、AXIS webservice获取客户端IP

    2019独角兽企业重金招聘Python工程师标准>>> import javax.annotation.Resource; import javax.servlet.http.Htt ...

  2. 三种获取Class类型的实例的方法

    通过Object类中的getClass()方法: 通过静态方法Class.forName("全类名"): 通过类字面常量Class.class. 三种获取Class类型的实例的方法 ...

  3. 深入分析几种PHP获取客户端IP的情况

    深入分析几种PHP获取客户端IP的情况 http://mount.blog.51cto.com/764124/528084 2011-03-27 16:13:29 标签:代理服务器 客户端 文章 PH ...

  4. php获取客户端IP地址的几种方法(转)

    php获取客户端IP地址的几种方法方法一 <?php $iipp=$_SERVER["REMOTE_ADDR"]; echo $iipp; ?>方法二<?php ...

  5. LInux初学者 必学 三种配置网卡IP地址的方式(非常详细)

    弱智选择安逸,强者选择永往向前.本文讲解Linux图形化.shell.命令三种方式配置IP地址静态网卡信息 基础 文章目录 目录 一.IP基础 二.三种网卡配置方式 1.图形化界面 2.nmtui:在 ...

  6. php获取ip几种方法区别,php获取客户端IP地址的几种方法

    php获取客户端IP地址的几种方法 阅读php获取客户端IP地址的几种方法, 1:来看看代码: echo "(1)浏览当前页面的用户的 IP 地址为:"; echo $_SERVE ...

  7. 网页获取客户端IP的两种方法

    不用英文写了哈: 在网页上获取客户端IP地址是件容易的事,用JavaScript以下代码即可: ip = '<!--#echo var="REMOTE_ADDR"--> ...

  8. Service获取客户端IP地址(java)

    Java代码 <strong>1.基于jax-ws开发的webservice获取客户端ip的方法[在代理类XXXDelegate添加如下代码]:</strong> import ...

  9. c# 获取客户端IP地址方法

    客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString();  客户端主机名: Request.ServerVaria ...

最新文章

  1. ASP.NET 2.0站点登录、导航与权限管理
  2. MySQL数据库之索引的应用
  3. Photoshop 手动画金标准流程
  4. java.net.SocketException: Software caused connection abort: socket write erro
  5. [css] 解释下css3的flexbox(弹性盒布局模型),以及它应用场景有哪些?
  6. 免堆期由谁申请_谈谈离婚冷静期
  7. python flask的request模块以及在flask编程中遇到的坑
  8. jetty9配置指南及jetty9部署jenkins
  9. 写于Silverlight整装待发之际【瞿杰】
  10. Retrofit结合RxJava使用指南
  11. 2015 HIAST Collegiate Programming Contest C
  12. Java并发包的理解
  13. 苹果手机长截屏_发现一个手机必备软件
  14. cmosfixr插件怎么用_Excel处理临床数据:插件篇
  15. Alignment--本地blast使用详解1-数据库序列检索下载及比对
  16. AOP层层递进 第一部分 代理
  17. 1、Django项目设计与搭配开发环境
  18. 新手引导功能的四种姿势
  19. 和尚与尼姑雨中相遇后不得不说的故事1
  20. 【数电基础】——逻辑代数运算

热门文章

  1. 在Windows Server2016中安装SQL Server2016(转)
  2. 对于java反射的理解
  3. Jquery实现类似百度的搜索框
  4. 如果使用StateServer或SQLServer,会遇到的问题。。。。
  5. USB 2.0高速和全速的区别
  6. MySQL(8)数据库中的高级(进阶)正则和存储过程
  7. 执行虚拟机mysql脚本_mysql一键执行脚本 超方便!!!
  8. java入参为方法_Java命令注入原理结合Java Instrument技术(FreeBuf首发)
  9. 云上快报 | 分布式架构引领核心系统架构转型新趋势
  10. 融合趋势下基于 Flink Kylin Hudi 湖仓一体的大数据生态体系