【问题标题】:Permission to access classes in Java WebStart在 Java WebStart 中访问类的权限
【发布时间】:2012-03-28 10:45:17
【问题描述】:

我创建了一个 .jar 文件,其中包含我的类以及从多个 Apache Tomcat jar 中提取的类。然后我签署了 jar 并使用<security><all-permissions/> 创建了一个 JNLP 文件。

但是在运行我的应用程序时,WebStart 拒绝访问我的 jar 中的类:

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 中的错误还是为什么会出现此安全异常?

【问题讨论】:

  • Tomcat 添加到 package.access 安全属性中,这在 WebStart 中确实不适合做。

标签: java security java-web-start


【解决方案1】:

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

System.setSecurityManager(null);

我在 Java Web Start 应用程序中使用它来获得完全控制,但应用程序需要签名并具有

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

正如你所说的那样。

【讨论】:

  • 请在此处发布您的答案,以获得赏金:stackoverflow.com/questions/9831063/…
  • 永远不要在签名代码中这样做!你会,呃,从任何正在运行的进程中删除安全管理器。
  • 这有什么问题?使用 应用程序已经可以访问所有用户数据。
  • 我同意 Witek 的观点。如果我想完全控制 VM 并且设置所有权限并没有做到这一点,我就使用了这种方法。
  • 我同意汤姆的观点。更好的方法是实现一个custom 安全管理器,它只提供对特定类(您的)的扩展(非完全)访问。
猜你喜欢
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2011-10-25
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
相关资源
最近更新 更多