文档章节

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

车开源
 车开源
发布于 2016/04/14 16:56
字数 474
阅读 91
收藏 3
拦截器分为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);
        }    
    }
}



本文转载自:http://blog.csdn.net/a9529lty/article/details/8437599

共有 人打赏支持
车开源
粉丝 13
博文 33
码字总数 8419
作品 0
佛山
后端工程师
私信 提问
SpringBoot | 第三十四章:CXF构建WebService服务

前言 上一章节,讲解了如何使用构建服务。其实,创建的方式有很多的,今天来看看如何使用来构建及调用服务。 一点知识 何为Apache-CXF 是一个开源的框架,帮助您利用编程 API 来构建和开发S...

oKong
2018/11/12
0
0
CXF 中自定义SOAPHeader

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

核桃白果
2013/08/08
0
3
CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)

下面具体的webservice实现类直接用的是上面的,这里不再说明 CXF拦截器使用,创建一个使用SOAPHeader的安全验证 xml格式: soap:Header </soap:Header> 一,首先在服务端创建一个拦截器(被调用...

闪电
2015/05/15
0
0
CXF 服务器端怎么将 soap 头信息给客户端?

请教个问题,CXF 服务器端怎么将 soap 头信息给客户端? 我们的项目 用的 cxf webService 跟 android IOS,客户端交互,IOS端要求要返回头信息给他们,来判读数据,之前我用输出拦截器做了,是...

yl1688
2013/08/19
873
1
Web Service的CXF实现(Spring整合方式)

新建Java Web项目,采用maven管理jar包,本文章只是提供核心代码文件如下: (1)maven的pom.xml (2)cxf-base.xml (3)cxf-bz-client.xml 客户端配置 (4)cxf-bz-server.xml服务端配置 (5)WSOrd...

蚂蚁也疯狂
2014/01/27
0
11

没有更多内容

加载失败,请刷新页面

加载更多

发布xxl-job executor dotnet core 执行器的实现

DotXxlJob [github][https://github.com/xuanye/DotXxlJob] xxl-job的dotnet core 执行器实现,支持XXL-JOB 2.0+ 1 XXL-JOB概述 [XXL-JOB][1]是一个轻量级分布式任务调度平台,其核心设计目标...

假正经哥哥
31分钟前
1
0
mysql 查询当天、本周,本月,上一个月的数据

今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 近7天 SELECT * FROM 表名 wher......

BraveLN
今天
3
0
Spring 事务初始化源码分析

相关文章 Spring 事务使用详解 Spring AOP 创建代理的源码解析 Spring AOP 注解方式源码解析 Spring AOP 功能使用详解 Spring 的 getBean 方法源码解析 Spring bean 创建过程源码解析 Spring...

TSMYK
今天
1
0
Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构

前面几节中,都是通过java层调用到jni中,jni向下到c++层并未介绍 看下Java层一个方法在c++层 MediaPlayer后续过程 frameworks/av/media/libmedia/MediaPlayer.cpp 找一个我们之前熟悉的setDa...

天王盖地虎626
今天
3
0
【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

1、前言   框框博客在线报时:2018-11-07 19:31:06   当前MySQL最新版本:8.0.13 (听说比5.7快2倍)   官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MySQL 8 要比 MySQL 5.7 快 2 ...

Code辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部