IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

[Débutante] SignatureProperties ou propriétés d'une signature xml


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut [Débutante] SignatureProperties ou propriétés d'une signature xml
    Bonjour,
    Je suis grande débutante en Java et mon projet est en ce moment de réaliser une signature xml d'un document.
    J'ai réussi à le faire en partie grace à votre aide d'ailleurs (merci ) mais me voilà avec un autre soucis : je voudrais pouvoir ajouter des informations diverses et variées à ma signature. J'ai vu que l'on pouvait le faire grace à l'élément SignatureProperties (si je ne me trompe pas) mais je ne vois pas trop comment m'y prendre.
    Si quelqu'un pouvait me donner plus d'infos/un exemple ça serait sympa !
    Et aussi me dire si je suis sur la bonne voie !
    Voici le début de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    	private static XMLSignature test_create_signature_enveloping2
    	(DigestMethod dm, SignatureMethod sm, KeyInfo ki, Key signingKey,
    			KeySelector ks, boolean b64,String mandate) throws Exception {
     
     
    		// create reference
    		Reference ref;
    		if (b64) {
    			ref = fac.newReference("#object", dm, Collections.singletonList
    					(fac.newTransform(Transform.BASE64,
    							(TransformParameterSpec) null)), null, null);
    		} else {
    			ref = fac.newReference("#object", dm);
    		}
     
    		// create SignedInfo
    		SignedInfo si = fac.newSignedInfo(withoutComments, sm,
    				Collections.singletonList(ref));
     
    		Document doc = db.parse(new ByteArrayInputStream(mandate.getBytes()));
     
    		XMLObject obj = fac.newXMLObject(Collections.singletonList
    				(new DOMStructure(racine)), // createTextNode(text))),
    				"object", null, null);
     
    		SignatureProperties properties = fac.newSignatureProperties(); 
    //...forcément ça ne marche pas je n'ai pas mis d'argument...Je ne savais pas trop quoi mettre
     
    		// create XMLSignature
    		XMLSignature sig = fac.newXMLSignature
    		(si, ki, Collections.singletonList(obj), null, null);
     
     
    		DOMSignContext dsc = new DOMSignContext(signingKey, doc);
     
    //...

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Pour vous faire part de mon avancement en attendant une réponse..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    		XMLObject obj = fac.newXMLObject(Collections.singletonList
    				(new DOMStructure(racine)), // createTextNode(text))),
    				"object", null, null);
     
    		String pan="012223215D";
    		List<String> list = new ArrayList<String>();
    		list.add(pan);
    		SignatureProperties properties = fac.newSignatureProperties(list,"test");
     
    		// create XMLSignature
    		XMLSignature sig = fac.newXMLSignature
    		(si, ki, Collections.singletonList(obj), null, null);
     
     
    		DOMSignContext dsc = new DOMSignContext(signingKey, doc);
    Pas d'erreur à la compilation mais une erreur quand je lance l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    * Generating signature-enveloping-hmac-sha1-40.xml Test 2
    Exception in thread "main" java.lang.ClassCastException: properties[0] is not a valid type
    	at org.jcp.xml.dsig.internal.dom.DOMSignatureProperties.<init>(DOMSignatureProperties.java:52)
    	at org.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory.newSignatureProperties(DOMXMLSignatureFactory.java:118)
    	at com.atosworldline.rd.payment.sdd.signature.TestMAC.test_create_signature_enveloping2(TestMAC.java:265)
    	at com.atosworldline.rd.payment.sdd.signature.TestMAC.test_create_signature_enveloping_hmac_sha1_40(TestMAC.java:203)
    	at com.atosworldline.rd.payment.sdd.signature.TestMAC.main(TestMAC.java:188)
    Pour info la ligne 265 est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SignatureProperties properties = fac.newSignatureProperties(list,"test");

  3. #3
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Tu devrais peut être lire cette doc en profondeur. Ya forcément ta réponse.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Bonjour
    Merci de m'avoir répondu mais sauf erreur de ma part, ils ne parlent pas de propriétés autres que l'on pourrait attacher à la signature, ni de la classe SignatureProperties.
    A moins que j'ai mal regardé..

  5. #5
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    De ce que je comprends (mais j'ai jamais utilisé cette API), ton problème vient du fait que ta List est une liste de String, alors qu'il te faudrait une liste de SignatureProperty.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Super ! Je vais regarder ça merci
    (Mais comment tu as su ? J'ai seulement vu qu'il fallait une liste..)

    Edit : ok. Donc SignatureProperty pour une propriété et SignatureProperties pour une liste de proprités...
    Mais dans SignatureProperty il y a cet exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     *   XMLSignatureFactory factory = XMLSignatureFactory.getInstance("DOM");
     *   SignatureProperty property = factory.newSignatureProperty
     *	(Collections.singletonList(content), "#Signature-1", "TimeStamp");
    qui ressemble fortement à celui de SignatureProperties , mais idem, le premier argument est censé être une liste (?). Quand je remplace content par pan, ça ne marche pas.. quel objet est content ?

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Me revoilà !
    J'ai été un peu aidée et voilà où j'en suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
                XMLObject obj = fac.newXMLObject(Collections.singletonList (new DOMStructure(racine)),"object", null, null);
     
                Text text = doc.createTextNode("testContent");
                SignatureProperty sp = fac.newSignatureProperty(Collections.singletonList(new DOMStructure(text)),"#testTarget", "testID");
                SignatureProperties sps = fac.newSignatureProperties(Collections.singletonList(sp), null);
                XMLObject obj2 = fac.newXMLObject(Collections.singletonList(sps),"testID2", null, null);
                List<XMLObject> objs = new ArrayList<XMLObject>();
     
               objs.add(obj2);
               objs.add(obj);
     
     
     
                // create XMLSignature
                XMLSignature sig = fac.newXMLSignature (si, ki, objs, null, null);
    Voici ce que ça donne (pour le début)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?xml version="1.0" encoding="UTF-8"?>
                    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
                                   <SignedInfo>
                                                   <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                                                   <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1">
                                                                   <HMACOutputLength>160</HMACOutputLength>
                                                   </SignatureMethod>
                                                   <Reference URI="#object">
                                                                   <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
                                                                   <DigestValue>MPOETRblYquy6F0jwCGK5MtnEVY=</DigestValue>
                                                   </Reference>
                                   </SignedInfo>
                                   <SignatureValue>HbM/0FZ6uIFQr8uoZYvxY90LJWs=</SignatureValue>
                                   <Object Id="testID2">
                                                   <SignatureProperties>
                                                                   <SignatureProperty Id="testID" Target="#testTarget">testContent</SignatureProperty>
                                                   </SignatureProperties>
                                   </Object>
                                   <Object Id="object">
                                   <document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.009.001.01">
                                                   <MndtInitnReq> 
                                                   ...
    Maintenant mon soucis c'est de savoir si je peux mettre ce signatureproperty dans signedinfo xD
    Enfin, c'est ce qu'on me demande mais j'avais l'impression que ce n'était pas possible... On peut mettre ce qu'on veut dans SignedInfo ? (c'est là où je crie un grand coup : à l'aide !!! mais bon ça se fait pas alors...je souffrirai en silence. lol)
    Je suis contente quand même d'avoir avancé

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2009
    Messages : 176
    Points : 61
    Points
    61
    Par défaut
    Si ça sert à quelqu'un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //Crétion d'un XMLObject pour introduire des informations
    //dans le KeyInfo
                XMLObject obj = fac.newXMLObject(Collections.singletonList
                        (new DOMStructure(racine)), // createTextNode(text))),
                        "object", null, null);
     
                List<XMLStructure> liste = new ArrayList<XMLStructure>();
     
                Text text1 = doc.createTextNode(testContent1);
                SignatureProperty sp1 = fac.newSignatureProperty
                (Collections.singletonList(new DOMStructure(text1)),"#sig1", "panID");
                liste.add(sp1);
     
    //Si plusieurs données
    //            Text text2 = doc.createTextNode("testContent2");
    //            SignatureProperty sp2 = fac.newSignatureProperty
    //            (Collections.singletonList(new DOMStructure(text2)),"#sig1", "testID2");
    //            liste.add(sp2);
     
                SignatureProperties sps = fac.newSignatureProperties(liste, null);
                KeyInfoFactory kif = fac.getKeyInfoFactory();
     
                KeyInfo ki = kif.newKeyInfo(Collections.singletonList(sps), "KeyInfoID");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Echo d'une chaine XML
    Par weabow dans le forum Eclipse PHP
    Réponses: 2
    Dernier message: 25/12/2013, 08h46
  2. [Débutante] Changer la propriété d'une colonne
    Par @yoyo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/04/2009, 15h06
  3. [Débutant] Initialiser les propriétés de tous les objets d'une ArrayList
    Par Tententai dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 23/05/2006, 20h24
  4. [Débutant] Problème de déconnexion d'une page JSP
    Par amal9 dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 22/01/2004, 13h40
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo