Gabi und Sascha
Tags - Kategorien : Alle | Berlin | Bücher | Fotografie | Java | Linkhalde | Weichware | Verfassung

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";
    };