文档章节

使用CXF为Web Service添加拦截器,自定义拦截器

车开源
 车开源
发布于 2016/04/14 16:56
字数 474
阅读 71
收藏 3
点赞 1
评论 0
拦截器分为Service端Client端

    拦截器是在发送soap消息包的某一个时机拦截soap消息包,对soap消息包的数据进行分析或处理。分为CXF自带的拦截器自定义的拦截器

1、Service端:

通过将org.apache.cxf.jaxws.EndpointImpl类的方法即可实现

  发布Web Service 方法可以通过Endpoint.publish()方法,此方法返为EndpointImpl,所以为Service端添加拦截器很简单。

UserService us = new UserServiceImpl();
String address = "http://192.168.10.254:9999/crazyit";
EndpointImpl ep = (EndpointImpl)Endpoint.publish(address , us);

//下面方法就可以添加拦截器(CXF提供的拦截器)
//cxf-2.2.10.jar  org.apache.cxf.interceptor.* (CXF提供的拦截器)
ep.getOutInterceptors()
    .add(new LoggingOutInterceptor());
ep.getInInterceptors()
    .add(new LoggingInInterceptor());
ep.getInInterceptors()
    .add(new AuthIntercetpr()); //此拦截器是自定义的拦截器。



2、Client端
客户端可以通过对org.apache.cxf.frontend.ClientProxy中的getClient()方法获取
org.apache.cxf.endpoint.Client对象,该对象可以为客户端添拦截器。

//为客户端添加拦截器
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(us);
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
//自定义拦截器
client.getOutInterceptors().add(new AddHeaderInterceptor("crazyit" , "crazyit.org2"));



3、自定义的拦截器

  自定义拦截器需要继承org.apache.cxf.phase.AbstractPhaseInterceptor抽象类,并实现其handleMessage方法,与重写自定义的构造器(由于AbstractPhaseInterceptor没有无参构造器,所以要在自定义构拦截器的造器中调用supper(带参数))。

public class AuthIntercetpr
    extends AbstractPhaseInterceptor<SoapMessage>
{
    public AuthIntercetpr()
    {
        //子类总会调用父类的构造器,
        //默认是调用无参数的构造器。

        //指定该拦截器在哪个阶段被激发
        super(Phase.PRE_INVOKE);
    }

    //处理消息
    public void handleMessage(SoapMessage message)
    {
        System.out.println("==================" + message);

        //获取SOAP消息的全部头
        List<Header> headers = message.getHeaders();

        if(headers.size() < 1)
        {
            throw new Fault(new SOAPException("SOAP消息头格式不对哦!"));
        }        

        for(Header header : headers)
        {
            SoapHeader soapHeader = (SoapHeader)header;
            //取出SOAP的Header元素
            Element element = (Element)soapHeader.getObject();
            checkSOAPHeader(element);
        }    
    }
}



© 著作权归作者所有

共有 人打赏支持
车开源
粉丝 12
博文 33
码字总数 8419
作品 0
佛山
后端工程师
SOA调用wsdl报 No binding operation info while invoking unknown method with params unknown

根据xsd文件用cxf生成对应wsdl,提供给soa调用,soa调用报No binding operation info while invoking unknown method with params unknown 接口模式是订阅发布; 1.想询问如何定位问题;2.想...

cflulu-heixiong ⋅ 06/06 ⋅ 0

mule发布调用webservice

mule发布webservice 使用mule esb消息总线发布和调用webservice都非常精简,mule包装了所有操作,你只需要拖控件配置就可以,下面讲解mule发布: 1.下面是flow,http监听接口,CXF发布webse...

jiazhipeng12 ⋅ 05/28 ⋅ 0

NutzBoot v2.1.7 新增 maven 插件和 mqtt-client

NutzBoot v2.1.7 已发布,更新如下: 新增maven插件和mqtt支持 时间: 2018-05-04 事件: 青年节 曲目: Penguin's Game 兼容性: 与2.0.x和2.1.x完全兼容 变更: fix: 修改jetty热加载无效问题 ...

wendal ⋅ 05/04 ⋅ 0

Android调用Axis、Axis2、Cxf发布的web service

在Android中调用axis2发布web service过程中一直报http500错误,axis2 web service是用eclipse插件生成的,发现直接打包成war包或直接在eclipse运行,Android调用的时候会报错,一定要打包成...

yuewawa ⋅ 05/04 ⋅ 0

【Apache CXF】Interceptor与Phase

server端和client端都可以使用拦截器做一些记录、转换、验证、错误处理什么的。 比如处理传输的对象较大时使用GZIPIn/OutInterceptor。 interceptor以phase方式组织起来,相似功能的interce...

runtimeErr ⋅ 2014/05/10 ⋅ 0

CXF和spring编写的WebService

• 为什么设计拦截器? 1. 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截器. • 拦截器分类: 2. 按所处的位置分:服务器端拦截器,客户端拦截器 3. 按消息的方向分:...

sxl01890 ⋅ 2016/04/17 ⋅ 0

spring cxf 配置

版本 -- cxf-2.5.2

www1056349063 ⋅ 2017/07/17 ⋅ 0

cxf拦截器客户端访问问题

我在项目中使用cxf作为webservice对外使用,为了安全原因我需要在项目中添加用户名密码验证,我的项目是java写的我从网上查了都是自定义拦截器,然后定义用户名密码。我想问的是,如果是其他...

电脑小童 ⋅ 2014/06/17 ⋅ 3

Acegi 为 Web services 的安全护航

安全,可是说是个老生常谈的话题,也可以说是个永恒的话题,无论是在那个领域,那个行业,安全都是非常的重要,写本文时正好看到一些矿难和香港游客 在印尼发生灾难的新闻,可见我们周围到处...

红薯 ⋅ 2011/04/22 ⋅ 2

CXF 中自定义SOAPHeader

拦截器(Interceptor)简单说明 Interceptor是CXF架构中一个很有特色的模式。你可以在不对核心模块进行修改的情况下,动态添加很多功能。这对于CXF这个以处理消息为中心的服务框架来说是非常有...

核桃白果 ⋅ 2013/08/08 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部