【问题标题】:How to allow JRE to access itself?如何让 JRE 访问自己?
【发布时间】:2014-05-10 20:17:22
【问题描述】:

因此,我设置了一个自定义 Policy 并启用了 SecurityManager 并决定我的应用不需要任何文件权限。

但如果我尝试使用https 协议打开一个 URL,我会收到以下错误:

access: access denied ("java.io.FilePermission" "jdk1.8.0/jre/lib/ext/amd64/libsunec.so" "read")

java.lang.Exception: Stack trace
    at java.lang.Thread.dumpStack(Thread.java:1329)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:447)
    at java.security.AccessController.checkPermission(AccessController.java:884)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
    at java.io.File.exists(File.java:814)
    at sun.misc.Launcher$ExtClassLoader.findLibrary(Launcher.java:222)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1820)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1119)
    at sun.security.ec.SunEC$1.run(SunEC.java:60)
    at sun.security.ec.SunEC$1.run(SunEC.java:58)

因此,JRE 中的某些类无法加载本机库,因为它没有获得文件读取权限。

有没有为 JDK 自己的类设置许可策略的好方法?

【问题讨论】:

  • 确保用于启动 Java 应用程序的用户可以执行相关文件
  • @Sebastian 这个错误来自Java,而不是操作系统。
  • 分页@Chris-Dennis:有什么建议吗? :)

标签: java securitymanager


【解决方案1】:

似乎没有办法将 JDK 的权限与 my 代码的权限分开。它们都由“null”类加载器加载,因此都获得相同的权限。如果有更好的方法,请告诉我。

现在我允许空类加载器使用此权限:

final String recursiveSuffix = File.separator + "-";
final String javaPath = System.getProperty("java.home") + recursiveSuffix;
new FilePermission(javaPath, "read,execute");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 2014-06-02
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多