我在 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相反 -
理想情况下,您应该看到:
- SignatureInterceptor.handleRequest(..)
- LoggingInterceptor.handleRequest(..)
- 端点处理请求
- LoggingInterceptor.handleResponse()
- SignatureInterceptor.handleResponse()
我尝试了一个小测试,它对我来说效果相同。
关于java - Spring WS 2.1.0 : Endpoint interceptors order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724098/