java - Spring WS 2.1.0 : Endpoint interceptors order

标签 java spring interceptor spring-ws endpoint

我在 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 数据(字节数组)存储在数据库中。

我需要在 LoggingInterceptor 之前调用 SignatureInterceptor 并以这种方式编写拦截器 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>

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

最佳答案

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

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

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

我尝试了一个小测试,它对我来说效果相同。

关于java - Spring WS 2.1.0 : Endpoint interceptors order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724098/

相关文章:

java - 如何用正确的输出计算java中的 double 值?

java - Spring data MongoDB 检查字段是否包含文本

java - 设计模式来验证请求?

spring - 在我们的 Spring Controller 中访问所有 @RequestHeader 键值作为 Map

java - Kafka生产者拦截器

java - Android中SOAP的HTTP GET方法,请纠正我

java - 如何使用基于 Java 的配置使用 Hibernate 和 MySQL 自动生成表。

java - Spring AOP,切入点表达式 : annotation with specific param

angular - 如何将异步服务用于 Angular httpClient 拦截器

post - axios拦截器在401重试时更改POST请求的内容类型