如何让JRE访问自己?

时间:2014-05-10 20:17:23

标签: java securitymanager

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

但是,如果我尝试使用https协议打开网址,我会收到此错误:

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自己的类设置许可策略的好方法?

1 个答案:

答案 0 :(得分:0)

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

现在我允许空类加载器的这个权限:

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