10

350助けてくれる人に懸賞金とワッフル!

Spring Web Service の暗号化に何日も苦労してきましたが、メッセージ本文で Spring の暗号化を機能させる方法がわかりません。サーバーに結果のメッセージを暗号化させるときはいつでも、クライアントはスキーマ ( XSD )に対して検証を試みる前にそれを復号化していないようです。

サーバー側の設定はこちら

サーバーの xwss セキュリティ構成

クライアントの Spring 構成

クライアントの xwss 構成

私にできることは、ユーザー トークンを暗号化し、正常に復号化することです。クライアントからサーバーにデータを送信するときにそれを行います。次に、サーバーはユーザートークンを復号化し、ユーザー資格情報を認証します。これは非常にうまく機能します。

戻ってくるメッセージの本文を暗号化しようとすると、問題が発生します。この問題はクライアント側で発生します。クライアントがメッセージを復号化する前に検証しようとしているように見えるため、スキーマに対して検証するときにエラーが発生します。

[Fatal Error] :1:192: The prefix "ns0" for element "ns0:HolidayListResponse" is not bound.
11-Dec-2009 7:45:32 AM com.sun.xml.wss.impl.apachecrypto.DecryptionProcessor decryptElementWithCipher
SEVERE: WSS1203: Exception [ The prefix "ns0" for element "ns0:HolidayListResponse" is not bound. ] while trying to decrypt message

そして、これが SOAP 応答そのものです。

そして、これがマーシャリングマッピングファイルです

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
                         "http://castor.org/mapping.dtd">
<mapping>
    <field-handler name="dateHandler" class="com.mycompany.hr.handlers.DateFieldHandler" />
    <field-handler name="dateHandler2" class="com.mycompany.hr.handlers.DateFieldHandler" />
    <class name="com.mycompany.hr.data.Holiday">
        <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="Holiday" />
        <field name="from" type="string" handler="dateHandler">
            <bind-xml name="StartDate" node="element" />
        </field>
        <field name="to" type="string" handler="dateHandler2">
            <bind-xml name="EndDate" node="element" />
        </field>
    </class>
    <class name="com.mycompany.hr.data.Employee">
        <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="Employee" />
        <field name="number" type="java.lang.Integer">
            <bind-xml name="Number" node="element" />
        </field>
        <field name="firstName" type="java.lang.String">
            <bind-xml name="FirstName" node="element" />
        </field>
        <field name="lastName" type="java.lang.String">
            <bind-xml name="LastName" node="element" />
        </field>
    </class>
    <class name="com.mycompany.hr.data.HolidayRequest">
        <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayRequest" />
        <field name="holiday" type="com.mycompany.hr.data.Holiday">
            <bind-xml name="Holiday" node="element" />
        </field>
        <field name="employee" type="com.mycompany.hr.data.Employee">
            <bind-xml name="Employee" node="element" />
        </field>
    </class>

    <class name="com.mycompany.hr.data.HolidayConfirmation">
        <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayConfirmation" />
        <field name="confirmationCode" type="java.lang.Integer">
            <bind-xml name="ConfirmationCode" node="element" />
        </field>
        <field name="confirmationMessage" type="java.lang.String">
            <bind-xml name="ConfirmationMessage" node="element" />
        </field>
    </class>

    <class name="com.mycompany.hr.data.HolidayResponse">
        <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayResponse" />
        <field name="confirmation" type="com.mycompany.hr.data.HolidayConfirmation">
            <bind-xml name="HolidayConfirmation" node="element" />
        </field>
    </class>
    <class name="com.mycompany.hr.data.HolidayListRequest">
        <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayListRequest" />
        <field name="id" type="java.lang.Integer">
            <bind-xml name="userId" node="element" />
        </field>
    </class>
    <class name="com.mycompany.hr.data.HolidayListResponse">
        <map-to ns-uri="http://mycompany.com/hr/schemas" ns-prefix="ns0" xml="HolidayListResponse" />
        <field name="holidays" type="com.mycompany.hr.data.Holiday" collection="vector">
            <bind-xml name="Holiday" node="element" />
        </field>
    </class>
</mapping>

たくさんの情報があることはわかっていますが、すべてを提供することにしました。暗号化の設定は正しいですか? メッセージの本文を暗号化し、クライアント側で復号化することはできませんか? この時点で、私はほとんどすべての提案を受け入れます。

4

2 に答える 2

2

プロパティを見てCastorMarshaller、「無視する」もののいくつかをtrueに設定してみてください(あなたの<bean id="castorMarshaller". たとえば、次のように設定します。

<property name="validating" value="false" />
<property name="suppressNamespaces" value="true" />
<property name="ignoreExtraElements" value="true" />

それらの1つがそれを行うかもしれません。

于 2010-01-03T09:20:36.810 に答える
0

確かですか

 <property name="xsd" value="classpath:src/java/hr.xsd"/>

適切に解決されていますか?

取得しているエラーは、その要素を処理する方法が見つからないことを示しています。応答が復号化されていない場合、要素名とプレフィックスは表示されません。

暗号化なしで Web サービスを検証して実行できますか?

于 2009-12-15T01:11:18.863 に答える