2012-03-28 68 views
4

我创建了一个.jar文件,其中包含我的类以及从多个Apache Tomcat jar中提取的类。然后我签署了jar并创建了一个带有<security><all-permissions/>的JNLP文件。访问Java WebStart中的类的权限

但我运行应用程序时,Webstart的拒绝访问类从我的罐子:

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 

这是Webstart的错误或为什么我得到这个安全异常?

+2

Tomcat添加到package.access安全属性中,这在WebStart中并不是一个合适的事情。 – 2012-03-28 16:12:24

回答

1

尝试通过调用清除安全管理:

System.setSecurityManager(null); 

我已经使用这个从Java Web Start应用程序,以获得完全控制,但应用程序需要进行签名,并有

<security> 
    <all-permissions/> 
</security> 

正如你所说的那样。

+0

请在此发布您的答案,以获得奖励:http://stackoverflow.com/questions/9831063/accesscontrolexception-when-starting-embedded-tomcat-from-java-webstart – Witek 2012-03-28 13:08:54

+1

千万不要在签名的代码中这样做!呃,你将会把安全管理器从正在运行的任何进程中移除。 – 2012-03-28 16:11:15

+0

这有什么问题?使用<所有权限>,应用程序已经可以访问所有用户数据。 – Witek 2012-03-28 18:47:24