Vincentius
Erfahrenes Mitglied
Hallo zusammen,
ich versuche ein paar Methoden einer Klasse von Zugriffen zu schützen und nur einer bestimmten Klasse oder einem bestimmten Package erlauben, auf die Methoden zuzugreifen. Dafür habe ich eine eigene Permission Klasse angelegt und sie in der ".policy" Datei deklariert:
Die MyPermission Klasse ist von der java.security.BasicPermission abgeleitet und überschreibt lediglig den Konstruktor:
In der Klasse mit der Methode, die ich zu schützen versuche, rufe ich den SecurityManager auf um die Permission zu prüfen:
Der SecurityManager wird natürlich beim Programmstart aktiviert mit -Djava.security.manager und meine ".policy" Datei übergeben: -Djava.security.policy=.java.policy
Jetzt komme ich zu meinem eigentlichen Problem:
wenn ich die grant Anweisung in der ".policy" Datei so lasse, kann jede Klasse auf meine "badMethod" zugreifen. Der Zugriff soll aber nur bestimmten Klassen oder bestimmten Packages gewährt werden. Wie und wo kann ich das festlegen? Etwa mit codeBase in der grant Anweisung? Aber damit kann man lediglich eine URL festlegen, von der der Code stammt, aber keine Packages oder Klassen-Namen.
Hat jemand vielleicht eine Idee? Vielleicht mache ich grundsätzlich was flasch?
Über jede Hilfe wäre ich sehr dankbar!
Grüße
Vincent
ich versuche ein paar Methoden einer Klasse von Zugriffen zu schützen und nur einer bestimmten Klasse oder einem bestimmten Package erlauben, auf die Methoden zuzugreifen. Dafür habe ich eine eigene Permission Klasse angelegt und sie in der ".policy" Datei deklariert:
Code:
grant {
permission com.xyz.security.MyPermission "badMethod";
};
Die MyPermission Klasse ist von der java.security.BasicPermission abgeleitet und überschreibt lediglig den Konstruktor:
Code:
public class MyPermission extends BasicPermission {
public MyPermission(String name) {
super(name);
}
}
In der Klasse mit der Methode, die ich zu schützen versuche, rufe ich den SecurityManager auf um die Permission zu prüfen:
Code:
public final class BadClass {
public static void badMethod() {
checkPermission();
// do bad things...
}
/**
* Checks if the invoker of this class has required permission.
*/
private static void checkPermission() {
final SecurityManager manager = System.getSecurityManager();
if (manager != null) {
manager.checkPermission(new MyPermission("badMethod"));
}
}
}
Jetzt komme ich zu meinem eigentlichen Problem:
wenn ich die grant Anweisung in der ".policy" Datei so lasse, kann jede Klasse auf meine "badMethod" zugreifen. Der Zugriff soll aber nur bestimmten Klassen oder bestimmten Packages gewährt werden. Wie und wo kann ich das festlegen? Etwa mit codeBase in der grant Anweisung? Aber damit kann man lediglich eine URL festlegen, von der der Code stammt, aber keine Packages oder Klassen-Namen.
Hat jemand vielleicht eine Idee? Vielleicht mache ich grundsätzlich was flasch?
Über jede Hilfe wäre ich sehr dankbar!
Grüße
Vincent