ws的interceptor和handler

本文探讨了在CXF框架下如何实现WebService的interceptor和handler,包括LogicalHandler<LogicalMessageContext>和SOAPHandler<SOAPMessageContext>的使用,并详细说明了如何配置多个handler以增强服务功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、interceptor
          ws的interceptor包括client端的in interceptor、out interceptor和server端的in interceptor、out interceptor。
     interceptor,拦截器主要在请求相应之前或者之后调用,很好的降低了代码的耦合性,
          主要用途有身份认证等
  • cxf实现的interceptor
          LoggingInInterceptor:登入日志打印拦截器
          LoggingOutInterceptor:登出日志打印拦截器
          详细地址:http://cxf.apache.org/javadoc/latest-2.7.x/org/apache/cxf/interceptor/Interceptor.html
          
          wss4jininterceptor:这个interceptor可以帮我们做一些权限校验工作

          自定义interceptor:
          可以继承AbstractPhaseInterceptor, 实现handleMessage方法,在无参构造方法中指定执行的阶段Phase;
          
          Phase:(org.apache.cxf.Phase)感觉完全有必要整个枚举,这还都是字符串。
               PRE_INVOKE、POST_INVOKE、INVOKE   ……           

2、handler
          ws的handler能够在读取soap消息前、后执行某些特定的代码,有点AOP的意思。

          handler的作用:检验cookie,持久化消息,增加自定义表头等
          
          handler的实现:javax.xml.ws.handler
  • LogicalHandler<LogicalMessageContext>
          只访问soap消息的payload部分

          可以通过context.get(MessageContext.*)获得true or false,进而对不同的逻辑执行不同代码。
          For example:
               booleab outbound = (Boolean)context.get((MessageContext.MESSAGE_OUTBOUND_PROPERTY))
  • SOAPHandler<SOAPMessageContext>          
          可以访问整个soap消息。

  • 配置多个handler
          如果要配置多个handler,需要写一个配置文件:

          <?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
   <handler-chain>
    <handler>
        
 <handler-name>handler1</handler-name>
        <handler-class>com.baidu.iit.handler1</handler-class>
    </handler>
    <handler>
        <handler-name>handler2</handler-name>
        <handler-class>com.baidu.iit.handler2</handler-class>
    </handler>
   </handler-chain>
</handler-chains>
     
          按照配置顺序,依次执行。

          @WebService
//这里展示如何用@HandlerChain来声明一组Handler,他们会对指定的web service使用的SOAP消息进行处理,
@HandlerChain(file="/handler_chains.xml")
public class CalcServiceImpl implements ICalcService {

3、interceptor和handler的区别
          interceptor要么前要么后处理,而handler是前后都处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值