0

Je voudrais obtenir de l'aide sur l'applet signée + transformation XSLSigné Applet lancers francs AccessControlException lorsque vous faites XSLT avec le document externe()

J'ai un signé applet (avec 1 fichier JAR) qui effectue une transformation XSL où le entrée XML, le XSL et la sortie est lu/écrit sur le système de fichiers local. Je l'ai déjà essayé avec JRE

  • 1.5.0_22
  • 1.6.0_29
  • 1.7.0_01

et le résultat est le même:

Quand mon fichier XSL contient une référence à un document XML externe:

<xsl:variable name="extXML" select="document('/tmp/A.XML')"/> 
<xsl:value-of select="$extXML/Child"/> 

la transformation échoue:

com.sun.org.apache.xalan.internal.xsltc.TransletException: java.security.AccessControlException: access denied (java.io.FilePermission /tmp/A.XML read) 
at com.sun.org.apache.xalan.internal.xsltc.dom.LoadDocument.documentF(LoadDocument.java:142) 
at in.topLevel() 
at in.transform() 
at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) 
at myxsltapplet.MyXSLTApplet.xsltTransform(MyXSLTApplet.java:66) 

Si cette référence au document XML externe est commenté tout travail très bien. L'utilisation d'un fichier de stratégie résout ce problème mais, malheureusement, ce n'est pas une option.

J'ai implémenté un URIResolver que j'ai défini pour le TransformerFactory mais j'ai aussi AccessControlException dedans.

Dans l'applet je récupéré le SecurityManager et son AccessControlContext et connecté leur hashcode:

SecurityManager: [email protected] 
getSecurityContext(): [email protected] 

Je l'ai fait la même chose dans ma mise en œuvre de URIResolver et AccessControlContext a changé:

SecurityManager: [email protected] 
getSecurityContext(): [email protected] 

appel checkPermission sur le AccessControlContext d'origine s'exécute sans exception.

Appel checkPermission sur le nouveau AccessControlContext accessible dans mon URIResolver:

AccessControlContext acc = (AccessControlContext) System.getSecurityManager().getSecurityContext(); 
acc.checkPermission(new FilePermission("/tmp/A.XML", "read")); 

lancers francs:

ERROR: 'java.security.AccessControlException: access denied (java.io.FilePermission /tmp/A.XML read)' 

Est-ce une chose normale ou un bug? Merci pour toute idée,

+0

une application standard peut lire ce fichier d'entrée? Qu'en est-il du consommateur par défaut du système pour le fichier? –

+0

Oui. Si la référence au document XML externe est supprimée, la transformation fonctionne. – Atos

+0

La fonctionnalité est-elle appelée en utilisant JavaScript? –

Répondre

Questions connexes