一尘不染

从Java Webstart启动嵌入式Tomcat时出现AccessControlException

tomcat

对于我们的Kunagi Java
Web应用程序,我们有一个签名kunagi.jar文件,其中包含我们的类以及嵌入式Tomcat 6中的类java -jar kunagi.jar。在调用时,它可以完美运行。

但是当使用Java WebStart启动它时,嵌入式Tomcat启动时出现异常:

java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.org.apache.catalina.deploy)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:393)
    at java.security.AccessController.checkPermission(AccessController.java:553)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1529)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:291)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at net.sourceforge.jnlp.runtime.JNLPClassLoader.loadClass(JNLPClassLoader.java:1018)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2444)
    at java.lang.Class.getMethod0(Class.java:2687)
    at java.lang.Class.getMethod(Class.java:1620)
    at org.apache.catalina.startup.SetPublicIdRule.begin(WebRuleSet.java:639)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)
    ... 33 more

当然kunagi.jar是签名的,否则它甚至不会启动。它接缝了Java
WebStart,从而在全局范围内启用Java安全性,从而以某种方式“嵌入”了Tomcat,并且初始化失败。

这是JNLP文件:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://kunagi.org/webstart" href="kunagi.jnlp">
    <information>
        <title>Kunagi</title>
        <vendor>Kunagi Team</vendor>
        <homepage href="http://kunagi.org"/>
        <description>SCRUM Tool</description>
        <description kind="short">SCRUM Tool</description>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="kunagi.jar" main="true" />
    </resources>
    <application-desc name="Kunagi" main-class="katokorbo.Katokorbo"/>
    <update check="always"/>
</jnlp>

有没有一种方法可以在Java
WebStart中禁用对Tomcat的安全检查?或者如何配置嵌入式Tomcat允许访问org.apache.catalina...


阅读 201

收藏
2020-06-16

共1个答案

一尘不染

我已经解决了以下问题:

WebStart启动我的应用程序后,请禁用安全管理器。我main()方法的第一行:

System.setSecurityManager(null);

告诉Tomcat使用默认的类加载器:

context.setLoader(new WebappLoader(getClass().getClassLoader()));

现在,Tomcat在WebStart中运行:-D

2020-06-16