CXF interceptor拦截顺序

CXF Interceptor中Phase的先后顺序

Java代码  

  1. org.apache.cxf.phase.PhaseManagerImpl中
  2. final void createInPhases() {
  3. int i = 0;
  4. inPhases = new SortedArraySet<Phase>();
  5. inPhases.add(new Phase(Phase.RECEIVE, ++i * 1000));
  6. inPhases.add(new Phase(Phase.PRE_STREAM, ++i * 1000));
  7. inPhases.add(new Phase(Phase.USER_STREAM, ++i * 1000));
  8. inPhases.add(new Phase(Phase.POST_STREAM, ++i * 1000));
  9. inPhases.add(new Phase(Phase.READ, ++i * 1000));
  10. inPhases.add(new Phase(Phase.PRE_PROTOCOL, ++i * 1000));
  11. inPhases.add(new Phase(Phase.USER_PROTOCOL, ++i * 1000));
  12. inPhases.add(new Phase(Phase.POST_PROTOCOL, ++i * 1000));
  13. inPhases.add(new Phase(Phase.UNMARSHAL, ++i * 1000));
  14. inPhases.add(new Phase(Phase.PRE_LOGICAL, ++i * 1000));
  15. inPhases.add(new Phase(Phase.USER_LOGICAL, ++i * 1000));
  16. inPhases.add(new Phase(Phase.POST_LOGICAL, ++i * 1000));
  17. inPhases.add(new Phase(Phase.PRE_INVOKE, ++i * 1000));
  18. inPhases.add(new Phase(Phase.INVOKE, ++i * 1000));
  19. inPhases.add(new Phase(Phase.POST_INVOKE, ++i * 1000));
  20. }
  21. final void createOutPhases() {
  22. outPhases = new SortedArraySet<Phase>();
  23. int i = 0;
  24. outPhases.add(new Phase(Phase.SETUP, ++i * 1000));
  25. outPhases.add(new Phase(Phase.PRE_LOGICAL, ++i * 1000));
  26. outPhases.add(new Phase(Phase.USER_LOGICAL, ++i * 1000));
  27. outPhases.add(new Phase(Phase.POST_LOGICAL, ++i * 1000));
  28. outPhases.add(new Phase(Phase.PREPARE_SEND, ++i * 1000));
  29. outPhases.add(new Phase(Phase.PRE_STREAM, ++i * 1000));
  30. outPhases.add(new Phase(Phase.PRE_PROTOCOL, ++i * 1000));
  31. outPhases.add(new Phase(Phase.WRITE, ++i * 1000));
  32. outPhases.add(new Phase(Phase.PRE_MARSHAL, ++i * 1000));
  33. outPhases.add(new Phase(Phase.MARSHAL, ++i * 1000));
  34. outPhases.add(new Phase(Phase.POST_MARSHAL, ++i * 1000));
  35. outPhases.add(new Phase(Phase.USER_PROTOCOL, ++i * 1000));
  36. outPhases.add(new Phase(Phase.POST_PROTOCOL, ++i * 1000));
  37. outPhases.add(new Phase(Phase.USER_STREAM, ++i * 1000));
  38. outPhases.add(new Phase(Phase.POST_STREAM, ++i * 1000));
  39. outPhases.add(new Phase(Phase.SEND, ++i * 1000));
  40. //Make sure ending interceptors are put in positions symmetric
  41. // to their starting interceptors
  42. outPhases.add(new Phase(Phase.SEND_ENDING, ++i * 1000));
  43. outPhases.add(new Phase(Phase.POST_STREAM_ENDING, ++i * 1000));
  44. outPhases.add(new Phase(Phase.USER_STREAM_ENDING, ++i * 1000));
  45. outPhases.add(new Phase(Phase.POST_PROTOCOL_ENDING, ++i * 1000));
  46. outPhases.add(new Phase(Phase.USER_PROTOCOL_ENDING, ++i * 1000));
  47. outPhases.add(new Phase(Phase.MARSHAL_ENDING, ++i * 1000));
  48. outPhases.add(new Phase(Phase.WRITE_ENDING, ++i * 1000));
  49. outPhases.add(new Phase(Phase.PRE_PROTOCOL_ENDING, ++i * 1000));
  50. outPhases.add(new Phase(Phase.PRE_STREAM_ENDING, ++i * 1000));
  51. outPhases.add(new Phase(Phase.PREPARE_SEND_ENDING, ++i * 1000));
  52. outPhases.add(new Phase(Phase.POST_LOGICAL_ENDING, ++i * 1000));
  53. outPhases.add(new Phase(Phase.USER_LOGICAL_ENDING, ++i * 1000));
  54. outPhases.add(new Phase(Phase.PRE_LOGICAL_ENDING, ++i * 1000));
  55. outPhases.add(new Phase(Phase.SETUP_ENDING, ++i * 1000));
  56. }

另外,如果级别一样,则按照配置的先后顺序进行拦截。顺序是<javaxws:interceptors></javaxws:interceptors>标签内出现的顺序。

时间: 2024-11-05 18:11:23

CXF interceptor拦截顺序的相关文章

CXF对Interceptor拦截器的支持

前面在Axis中介绍过Axis的Handler,这里CXF的Interceptor就和Handler的功能类似.在每个请求响应之前或响应之后,做一些事情.这里的Interceptor就和Filter.Struts的Interceptor很类似,提供它的主要作用就是为了很好的降低代码的耦合性,提供代码的内聚性.下面我们就看看CXF的Interceptor是怎么样工作的. 1. 我们就用上面的HelloWorldService,客户端的调用代码重新写一份,代码如下: package com.hoo.

使用SpringMVC开发Restful API(2)-使用Filter、Interceptor对请求进行拦截和处理拦截顺序

一 使用Filter拦截请求: 1.使用Filter拦截只需要我们定义一个类并实现javax.servlet.Filter接口,然后将其注册为bean即可. 示例: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; im

CXF 自定义拦截器

------要想添加一个拦截器,目的是调用之前做一个认证,也就是说不是所有的请求都能调用,这样就可以验证了,更安全. 1     在服务端写一个拦截器,public class MyInterceptor extends AbstractPhaseInterceptor<SoapMessage>  ,要给一个构造方法(可以确定是什么时候执行这个拦截器,Phase.PRE_INVOKE就是调用之前执行),重写handleMessage方法,因为信息在请求头里面,所以这个方法中有一些解析XML的A

Apache CXF自定义拦截器

为什么设计拦截器?1.为了在webservice请求过程中,能动态操作请求和响应数据,CXF设计了拦截器 拦截器分类: 1.按所处的位置分:服务器端拦截器,客户端拦截器. 2.按消息的方向分:入拦截器,出拦截器. 3.按定义者分:系统拦截器,自定义拦截器. 客户端添加日志拦截器 package com.client.interceptor; import java.util.List; import javax.xml.namespace.QName; import org.apache.cxf

SpringMVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep

WebService学习笔记-CXF添加拦截器

Webservice拦截器:在webservice请求过程中,动态操作请求和响应的数据 分类 按照所处的位置分:服务器端拦截器  客户端拦截器 按照消息的方向分:入拦截器  出拦截器 按照定义者分:系统拦截器 自定义拦截器 在服务器端添加拦截器 package com.demo; //注意引入的类一定要正确 import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import or

WebService学习笔记-CXF添加自定义拦截器

使用自定义拦截器实现用户名和密码的校验 客户端:出拦截器 服务器:入拦截器 客户端 AddUserInterceptor.java package com.demo.interceptors; import java.util.List; import javax.xml.namespace.QName; import org.apache.cxf.binding.soap.SoapMessage; import org.apache.cxf.headers.Header; import org

SpringMVC 中的Interceptor 拦截器

1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors>  <!-- 日志拦截器 -->  <mvc:interceptor>   <mvc:mapping path="/**" />   <mvc:exclude-mapping path="/static/**" />   <bean class="拦截器java代码路径" />  

Spring MVC中使用Interceptor拦截器

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Intercep