나는 그 XSL 변환을 수행 I (1 개 JAR 파일 포함) 가 애플릿에 서명 한 서명 애플릿 + XSL 변환이 AccessControlException가를 throw()
을에 도움을받을 싶은 곳 XML을 입력하면 XSL과 출력이 로컬 파일 시스템에서 읽고 쓰게됩니다. 이미 JRE
- 1.5.0_22
- 1.6.0_29
- 1.7.0_01
그것을 시도하고 그 결과는 동일합니다 :
때 내 XSL 파일 외부 XML 문서에 대한 참조를 포함합니다.
<xsl:variable name="extXML" select="document('/tmp/A.XML')"/>
<xsl:value-of select="$extXML/Child"/>
01 23,516,
변환이 실패 :
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)
외부 XML 문서에이 참조가 잘 모든 작업을 주석 처리됩니다. 정책 파일을 사용하면이 문제가 해결되지만 안타깝게도이 옵션은 아닙니다.
나는 TransformerFactory에 대해 설정 한 URIResolver을 구현했지만 AccessControlException도 얻습니다.
애플릿에서나는 SecurityManager과 AccessControlContext를 검색하고 자신의 해시 코드를 로그 아웃 :
내를 사용해 URIResolver 구현에서 동일했고, AccessControlContext의이 변경되었습니다SecurityManager: sun.plugin2.applet.Applet2[email protected]
getSecurityContext(): [email protected]
:
SecurityManager: [email protected]
getSecurityContext(): [email protected]
부름을 오리지날의 AccessControlContext의 checkPermission가 예외없이 실행됩니다.
내를 사용해 URIResolver에 액세스 할 수있는 새로운 AccessControlContext에에의 checkPermission를 호출 :
AccessControlContext acc = (AccessControlContext) System.getSecurityManager().getSecurityContext();
acc.checkPermission(new FilePermission("/tmp/A.XML", "read"));
예외 :
ERROR: 'java.security.AccessControlException: access denied (java.io.FilePermission /tmp/A.XML read)'
은 일상적인 일이나 버그인가? 아무쪼록 고맙습니다.
표준 응용 프로그램이 해당 입력 파일을 읽을 수 있습니다 여기에 이유를 몇 가지 설명은? 파일의 시스템 기본 소비자는 어떻습니까? –
예. 외부 XML 문서에 대한 참조가 제거되면 변환이 작동합니다. – Atos
JavaScript를 사용하여 기능이 호출 되었습니까? –