我在 Apache CXF (2.7.11) 中使用带有 UsernameToken Timestamp 功能的 WSS4J 构建了一个 Web 服务(基于自上而下)。当我使用 SOAP UI 进行相同测试时,服务器和客户端代码似乎工作正常。
但是有一个客户端代码在 WS 安全标头中以 IST(印度标准时间)时区发送数据;为此,客户端收到The message has expired (WSSecurityEngine: Invalid timestamp The security semantics of the message have expired)
正在抛出的错误。调查我发现 WSS4J 使用的时区是 UTC。在 WSS4JInterceptor 中将 timestampStrict 设为 false 也不起作用。任何帮助,将不胜感激。
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<property name="properties">
<map>
<entry key="action" value="UsernameToken Timestamp" />
<entry key="timestampStrict" value="false"/>
<entry key="user" value="test_user" />
<entry key="passwordType" value="PasswordText" />
<entry>
<key>
<value>passwordCallbackRef</value>
</key>
<ref bean="passwordCallback" />
</entry>
</map>
</property>
</bean>
</jaxws:inInterceptors>