因此,我设置了自定义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自己的类设置许可策略的好方法?
答案 0 :(得分:0)
似乎没有办法将JDK的权限与我的代码的权限分开。它们都由“null”类加载器加载,因此两者都获得相同的权限。如果有更好的方法,请告诉我。
现在我允许空类加载器的这个权限:
final String recursiveSuffix = File.separator + "-";
final String javaPath = System.getProperty("java.home") + recursiveSuffix;
new FilePermission(javaPath, "read,execute");