我在Apache CXF(2.7.11)中使用带有UsernameToken时间戳功能的WSS4J构建了一个Web服务(自上而下)。当我使用SOAP UI测试相同的服务器&客户端代码似乎工作正常。
但是有一个客户端代码在WS Security标头中以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>
答案 0 :(得分:1)
根据SOAP消息安全配置文件,在UTC时间之外的任何时间发送时间戳无效:“所有引用必须是UTC时间。”。
科尔姆。