Java security manager

grant {
     permission java.io.FilePermission "C:\\class\\*", "read, write";
     permission java.lang.RuntimePermission "createClassLoader";
};

My policy.txt

java.security.AccessControlException: access denied (java.io.FilePermission c:\class read)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.isDirectory(Unknown Source)
    at java.io.File.toURI(Unknown Source)
    at loader.Main.main(Main.java:35)

My exception .. ???

My challenge

String path = "c:\\class\\";
String app = "x.MyHTMLPrint";


File file = new File(path);
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};

ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass(app);

As soon as I give full permission, it works.

any ideas? THX!

+3
source share
1 answer

There seem to be two problems.

First, as Ishai says File.toURI, it seems like you need to verify that a file without a trailing separator is a directory. This is probably a mistake.

Secondly, the wildcard for recursive subdirectories is '-' not '*'.

So your policy file should look like this:

grant {
    permission java.io.FilePermission "C:\\class\\-", "read";
    permission java.io.FilePermission "C:\\class", "read";
    permission java.lang.RuntimePermission "createClassLoader";
};

Also, if you use URLClassLoader.newInstance, you do not need permissions createClassLoader, and you get a complete implementation of the class loader.

+8
source

Source: https://habr.com/ru/post/1723821/


All Articles