【问题标题】:Spring WS 2.1.0: Endpoint interceptors orderSpring WS 2.1.0:端点拦截器顺序
【发布时间】:2012-10-04 09:20:41
【问题描述】:

我在 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>

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

【问题讨论】:

标签: java spring interceptor spring-ws endpoint


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的帮助解释。我真的没有注意到handleResponse的顺序与handleRequest相反。现在我已经了解拦截器链的工作原理了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多