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-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相关推荐
- JAVA CXF、XFIRE、AXIS webservice获取客户端IP
2019独角兽企业重金招聘Python工程师标准>>> import javax.annotation.Resource; import javax.servlet.http.Htt ...
- 三种获取Class类型的实例的方法
通过Object类中的getClass()方法: 通过静态方法Class.forName("全类名"): 通过类字面常量Class.class. 三种获取Class类型的实例的方法 ...
- 深入分析几种PHP获取客户端IP的情况
深入分析几种PHP获取客户端IP的情况 http://mount.blog.51cto.com/764124/528084 2011-03-27 16:13:29 标签:代理服务器 客户端 文章 PH ...
- php获取客户端IP地址的几种方法(转)
php获取客户端IP地址的几种方法方法一 <?php $iipp=$_SERVER["REMOTE_ADDR"]; echo $iipp; ?>方法二<?php ...
- LInux初学者 必学 三种配置网卡IP地址的方式(非常详细)
弱智选择安逸,强者选择永往向前.本文讲解Linux图形化.shell.命令三种方式配置IP地址静态网卡信息 基础 文章目录 目录 一.IP基础 二.三种网卡配置方式 1.图形化界面 2.nmtui:在 ...
- php获取ip几种方法区别,php获取客户端IP地址的几种方法
php获取客户端IP地址的几种方法 阅读php获取客户端IP地址的几种方法, 1:来看看代码: echo "(1)浏览当前页面的用户的 IP 地址为:"; echo $_SERVE ...
- 网页获取客户端IP的两种方法
不用英文写了哈: 在网页上获取客户端IP地址是件容易的事,用JavaScript以下代码即可: ip = '<!--#echo var="REMOTE_ADDR"--> ...
- Service获取客户端IP地址(java)
Java代码 <strong>1.基于jax-ws开发的webservice获取客户端ip的方法[在代理类XXXDelegate添加如下代码]:</strong> import ...
- c# 获取客户端IP地址方法
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVaria ...
最新文章
- ASP.NET 2.0站点登录、导航与权限管理
- MySQL数据库之索引的应用
- Photoshop 手动画金标准流程
- java.net.SocketException: Software caused connection abort: socket write erro
- [css] 解释下css3的flexbox(弹性盒布局模型),以及它应用场景有哪些?
- 免堆期由谁申请_谈谈离婚冷静期
- python flask的request模块以及在flask编程中遇到的坑
- jetty9配置指南及jetty9部署jenkins
- 写于Silverlight整装待发之际【瞿杰】
- Retrofit结合RxJava使用指南
- 2015 HIAST Collegiate Programming Contest C
- Java并发包的理解
- 苹果手机长截屏_发现一个手机必备软件
- cmosfixr插件怎么用_Excel处理临床数据:插件篇
- Alignment--本地blast使用详解1-数据库序列检索下载及比对
- AOP层层递进 第一部分 代理
- 1、Django项目设计与搭配开发环境
- 新手引导功能的四种姿势
- 和尚与尼姑雨中相遇后不得不说的故事1
- 【数电基础】——逻辑代数运算
热门文章
- 在Windows Server2016中安装SQL Server2016(转)
- 对于java反射的理解
- Jquery实现类似百度的搜索框
- 如果使用StateServer或SQLServer,会遇到的问题。。。。
- USB 2.0高速和全速的区别
- MySQL(8)数据库中的高级(进阶)正则和存储过程
- 执行虚拟机mysql脚本_mysql一键执行脚本 超方便!!!
- java入参为方法_Java命令注入原理结合Java Instrument技术(FreeBuf首发)
- 云上快报 | 分布式架构引领核心系统架构转型新趋势
- 融合趋势下基于 Flink Kylin Hudi 湖仓一体的大数据生态体系