…am Alex der Mann mit Krücken, der Die Stütze verkaufte.
In einem Projekt wird eine globale Variable benötigt (transparentes loggen einer Session). Die Ressource wurde mittels einer eigenen Permission-Klasse vor Missbrauch geschützt. Build-Umgebung ist Maven 2. Die Ressource und die Permissions werden ausreichend getestet. Hierfür wird das Surefire-Plugin im POM entsprechend konfiguriert:
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<showSuccess>true</showSuccess>
<forkMode>always</forkMode>
<argLine>-es -dsa -Djava.security.policy=src/test/resources/test.policy -Djava.security.manager</argLine>
<testFailureIgnore>true</testFailureIgnore>
<childDelegation>true</childDelegation>
</configuration>
</plugin>
</plugins>
</build>
Der Aufruf des Goals 'test' liefert keine Fehler. Das Goal 'site' hingegen scheitert bei allen sicherheitsrelevanten Tests. Auslöser scheint das site-Plugin (Version 2.0-beta-5) zu sein. Die folgenden Runtime-Permissions müssen gesetzt sein:
grant {
permission java.lang.RuntimePermission "setContextClassLoader";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "shutdownHooks";
permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";
permission java.lang.RuntimePermission "setIO";
permission java.lang.RuntimePermission "getProtectionDomain";
permission java.lang.RuntimePermission "accessDeclaredMembers";
}
Die Permisson getProtectionDomain muss erlaubt sein, weil diese Funktionalität in der Klasse der globalen Variable benötgt wird.
Weitere Permissons für das Plugin sind:
grant {
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
permission java.net.SocketPermission "127.0.0.1", "connect,resolve";
permission java.util.logging.LoggingPermission "control";
permission java.util.PropertyPermission "*", "read,write";
}
Dabei ist "<<ALL FILES>>", "delete" nur nötig, wenn kein 'mvn clean' durchgeführt wurde. Die Permissions für die Properties habe ich aus Faulheit so freizügig eingestellt. EInige werden von Maven benötigt.
