2

我在 Spring WS 上有一个带有两个端点拦截器的 Web 服务。XML 配置如下所示

<sws:interceptors>
    <bean class="org.someorg.security.SignatureInterceptor"/>
    <bean class="org.someorg.common.LoggingInterceptor">
        <constructor-arg value="logger_1"/>
    </bean>    
</sws:interceptors>

SignatureInterceptor 验证传入 SOAP 信封的签名并签署传出 SOAP 信封。

LoggingInterceptor 将原始 SOAP 数据(字节数组)存储在数据库中。

我需要 SignatureInterceptor 在 LoggingInterceptor 之前调用并以这种方式编写拦截器 bean,我希望它可以解决我的问题。但是根据日志消息 LoggingInterceptor 首先调用,因此未签名的数据存储在数据库中。

然后我更改了配置,只是交换了 bean 声明,它们开始按我的预期工作

<sws:interceptors>
    <bean class="org.someorg.common.LoggingInterceptor">
        <constructor-arg value="logger_1"/>
    </bean>    
    <bean class="org.someorg.security.SignatureInterceptor"/>    
</sws:interceptors>

但是这个案子我不清楚。如何显式设置拦截器的调用顺序?

4

1 回答 1

3

顺序应该是您指定的方式(除非它们映射到特定的端点 url,在这种情况下它们最后处理) - 请注意处理 handleResponse 的顺序与 handlRequest 相反-

理想情况下,您应该看到:

  1. SignatureInterceptor.handleRequest(..)
  2. LoggingInterceptor.handleRequest(..)
  3. 端点处理请求
  4. LoggingInterceptor.handleResponse()
  5. SignatureInterceptor.handleResponse()

我尝试了一个小测试,它对我的​​工作方式相同。

于 2012-10-04T13:21:43.733 回答