2009-12-11 17 views
10

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

Client's xwss 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.

+0

non hai ancora dato tutte le informazioni;) Dare lo stacktrace completo (o almeno tagliarlo in un posto significativo, non l'inizio) – Bozho

+0

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

+0

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 ... –

risposta

0

Sei certo

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

è stato risolto correttamente?

L'errore che stai ricevendo indica che non riesce a trovare come gestire quell'elemento. Non vedresti il ​​nome dell'elemento e il prefisso se la risposta non è stata decifrata.

È possibile convalidare ed eseguire il servizio Web senza crittografia?

+0

Sì, sono in grado di eseguirlo correttamente senza crittografia. Conosce ns0: HolidayListResponse perché lo schema richiede che sia l'elemento di livello superiore nella risposta, ma il messaggio è crittografato, quindi non vede quell'elemento di livello superiore. Per quanto riguarda la proprietà xsd, sì, si sta risolvendo correttamente, i percorsi di inizio primavera direttamente dal percorso della classe. Ho provato a cambiare il percorso e ottengo un errore all'avvio se non riesce a trovare il file XSD. – Zoidberg

2

Dai un'occhiata alle proprietà CastorMarshaller e prova a impostare alcune delle "ignoranti" su true (nel tuo <bean id="castorMarshaller"). Per esempio set:

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

Uno di questi potrebbe farlo.

+0

Quando avrò la possibilità, lo proverò e te lo farò sapere. Grazie. – Zoidberg

+0

@Zoidberg ancora nessun aggiornamento? :) – Bozho

+0

Scusate per la mancanza di risposta, il nostro obiettivo si è spostato da questo ad altre priorità in questo momento e sono stato piuttosto impegnato. Voterò questa risposta, perché sembra quella giusta. Una volta che avrò la possibilità di provarlo, ti farò sapere se funziona o meno. Grazie ancora per la risposta. – Zoidberg

Problemi correlati