0

ws-security に Wss4jSecurityInterceptor を使用して、Spring-ws に実装された Web サービス クライアントがあります。

エンドポイントの呼び出しは機能し、データは暗号化され、署名されて送信されますが、応答が受信されても​​復号化されません。代わりに JAXB の unmarshaller が呼び出され、次のようなエラーが発生します。

Error : org.springframework.oxm.jaxb.JaxbUnmarshallingFailureException:
JAXB unmarshalling exception: unexpected element 
(uri:"http://www.w3.org/2001/04/xmlenc#", local:"EncryptedData"). 
Expected elements are...

期待される要素は、xdd 内のすべてのデータ型をリストします。

これは私の Wss4jSecurityIntercepter が構成されているものです:

<!-- username / password for signing -->
<property name="enableSignatureConfirmation" value="false" />
<property name="securementUsername" value="${securementUsername}" />
<property name="securementSignatureKeyIdentifier" value="DirectReference" />
<property name="securementPassword" value="${keystore.password}" />
<property name="securementSignatureCrypto" ref="crypto" />

<!-- username (certificate) and keystore for encryption -->
<property name="securementEncryptionUser" value="${securementEncryptionUsername}" />
<property name="securementEncryptionKeyIdentifier" value="SKIKeyIdentifier" />
<property name="securementEncryptionCrypto" ref="crypto" />

<!-- validate incoming message signature and decrypt -->
<property name="validationActions" value="Signature Encrypt Timestamp" />
<property name="validationDecryptionCrypto" ref="crypto" />
<property name="validationSignatureCrypto" ref="crypto" />

<property name="validationCallbackHandler">
    <bean
        class="org.springframework.ws.soap.security.wss4j.callback.KeyStoreCallbackHandler">
        <property name="privateKeyPassword" value="${keystore.password}" />
    </bean>
</property>

何がうまくいかないのですか?

ありがとう。

EDIT : これは、handleResponse で false を返した ClientInterceptor が原因で、wss4j インターセプターの前に配置されていたため、すべての Interceptor 処理が停止しました。

4

2 に答える 2

0

あなたの根本的な原因は、メッセージの確保が反対側から行われた順序に関連している可能性があります。

アクションの順序は重要であり、インターセプターによって強制されます。インターセプターは、セキュリティ アクションが validationActions で指定された順序とは異なる順序で実行された場合、着信 SOAP メッセージを拒否します。

ログレベルを上げることをお勧めします (log4j をまだ使用していない場合は追加して、インターセプターがメッセージを復号化できなかった理由を確認してください。

最後になりましたが、メッセージが復号化されなかった場合にプロセスが先に進むのを防ぐために、バリデーターを実装する必要があります。

于 2013-05-23T19:12:54.980 に答える