350 Bounty et des gaufres à la personne qui peut me aider!Décryptage du message avec un service Web client Spring
J'ai lutté avec Spring cryptage du service Web pour les jours et je ne peux pas comprendre comment faire pour que le cryptage de Spring sur le corps du message fonctionne. Chaque fois que le serveur crypte le message résultant, le client ne semble pas le décrypter avant de tenter de le valider par rapport au schéma (XSD).
Here is the server side configuration
The server's xwss security configuration
The client's Spring configuration
Ce que je peux faire est de chiffrer le jeton utilisateur et décrypter avec succès. Je fais cela lors de l'envoi de données du client au serveur. Le serveur déchiffre ensuite le jeton d'utilisateur et authentifie les informations d'identification de l'utilisateur, ce qui fonctionne assez bien.
Le problème se produit si j'essaie de chiffrer le corps du message qui revient. Le problème se produit du côté du client. Il semble que le client essaie de valider le message avant de le décrypter, et qu'une erreur survient lors de la validation par rapport au schéma.
[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.
Et voici le fichier de mappage de triage
<?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>
Je sais qu'il est beaucoup d'informations, mais je pensais que je voudrais tout donner. Ma configuration de chiffrement est-elle correcte? N'est-il pas possible de crypter le corps du message et de le déchiffrer du côté client? À ce stade, je suis ouvert à presque n'importe quelle suggestion.
vous avez toujours pas donné l'information tout;) Donnez la pleine stacktrace (ou au moins couper à un endroit significatif, pas le début) – Bozho
C'est tout ce que je reçois pour une erreur. Je n'ai pas toute trace de pile. La trace de la pile que j'obtiens essaie de valider le message contre le XSD, ce qui ne fonctionnera pas sur les données cryptées. – Zoidberg
Il semble que DecryptionProcessor souhaite connaître le schéma de ce qu'il déchiffre, mais ne le fait pas. Dans print xml de votre client, je ne vois pas les références "schema" utilisées quelque part ... –