350 Bounty e cialde alla persona che può aiutarmi!Decifrare messaggi con un client del servizio Web Spring
Sono stato alle prese con la crittografia del servizio Web Spring per giorni e non riesco a capire come ottenere la crittografia di Spring sul corpo del messaggio per funzionare. Ogni volta che ho il server crittografare il messaggio risultante, il client non sembra decifrarlo prima che tenti di convalidarlo sullo Schema (XSD).
Here is the server side configuration
The server's xwss security configuration
The client's Spring configuration
Quello che posso fare è di crittografare l'utente token e decifrare con successo. Lo faccio quando invio dati dal client al server. Il server quindi decrittografa il token utente e autentica le credenziali dell'utente, che funziona abbastanza bene.
Il problema si verifica se provo a crittografare il corpo del messaggio che ritorna. Il problema si verifica sul lato client. Sembra che il client stia tentando di convalidare il messaggio prima di decodificarlo e quindi si verifica un errore durante la convalida con lo schema.
[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
And here is the SOAP response itself.
E qui è il file di mapping di smistamento
<?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>
So che è un sacco di informazioni, ma ho pensato che vuole provvedere a tutto. La mia configurazione di crittografia è corretta? Non è possibile cifrare il corpo del messaggio e decodificarlo dal lato client? A questo punto sono aperto a quasi ogni suggerimento.
non hai ancora dato tutte le informazioni;) Dare lo stacktrace completo (o almeno tagliarlo in un posto significativo, non l'inizio) – Bozho
Questo è tutto quello che ottengo per un errore. Non ho una traccia completa dello stack. La traccia di stack che ottengo sta tentando di convalidare il messaggio rispetto all'XSD, che non funzionerà su dati crittografati. – Zoidberg
Sembra che DecryptionProcessor voglia conoscere lo schema di ciò che decodifica, ma non lo fa. Nell'XML del vostro client non vedo i riferimenti "schema" usati da qualche parte ... –