从Java Webstart启动嵌入式Tomcat时出现AccessControlException [英] AccessControlException when starting embedded Tomcat from Java Webstart

查看:57
本文介绍了从Java Webstart启动嵌入式Tomcat时出现AccessControlException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

For our Kunagi Java web application we have a signed kunagi.jar file which contains our classes together with classes from embedded Tomcat 6. This runs perfectly when calling java -jar kunagi.jar.

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

But when starting it with Java WebStart, I get an exception while embedded Tomcat is starting:

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,并且无法初始化.

Of course kunagi.jar is signed, otherwise it wouldn't even start. It seams Java WebStart enables Java Security globally, which somehow embedded Tomcat "inherits" and fails to initialize.

这是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...?

Is there a way to disable security checks for Tomcat inside of Java WebStart? Or how can I configure embedded Tomcat to permit access to org.apache.catalina...?

推荐答案

我已经解决了如下问题:

I have solved my problem as follows:

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

Disable security manager after WebStart started my application. First line in my main() method:

System.setSecurityManager(null);

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

Tell Tomcat to use the default class loader:

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

现在Tomcat在WebStart中运行:-D

Now Tomcat runs within WebStart :-D

这篇关于从Java Webstart启动嵌入式Tomcat时出现AccessControlException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆