Der GroovyClassLoader ermöglicht es, dass Groovy-Scripts im Sicherheitscontext einer JVM abgearbeitet werden können. Wird die JVM mit dem Property -Djava.security.manager gestartet, wird der SecurityManager mit seinem Kontext eingeschaltet. Mit dem Property -Djava.security.policy wird ein Verweis auf eine Policy-Datei übergeben. Damit das folgende Code-Snippet abgearbeitet werden kann, müssen in der Policy-Datei einige Security-Permissions gewährt werden.
Code-Snippet:
final ClassLoader parent = GroovySecurityTest.class.getClassLoader();
final GroovyClassLoader loader = new GroovyClassLoader(parent);
final String script = "println 'hello world'";
final GroovyCodeSource gcs = new GroovyCodeSource(script,
"HelloWorld",
"/speexx/test");
final Class groovyClass = loader.parseClass(gcs);
final GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
final Object[] arguments = new Object[] {};
groovyObject.invokeMethod("run", arguments);
Policy Grants:
grant {
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "getProtectionDomain";
permission java.util.PropertyPermission "antlr.ast", "read";
permission java.util.PropertyPermission "groovy.ast", "read";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission groovy.security.GroovyCodeSourcePermission "/speexx/test";
};
Geschrieben von sascha am 17. Juli 2006 10:28:44 CEST
