Wie erzwinge ich die Reflexionssicherheit, indem ich nicht erlaube, dass das Objekt Method
, Field
, Constructor
setAccessible(true)
aufruft? SecurityPolicy-Datei oder etwas anderes?
Normalerweise ist für eigenständige Java-Anwendungen kein SecurityManager
registriert.
Ich benutze dieses System.setSecurityManager(new SecurityManager());
Dieser Ansatz funktioniert für Aufrufmethoden.
Ich möchte den gesamten jar oder Client-Code erzwingen, der den jar nicht erlaubt, setAccessible(true);
Jeder bessere Ansatz?
Danke.
Äh, es funktioniert für setAccessible. Siehe:
%Vor%und
%Vor%Ergebnisse in
%Vor%Ein Grund, warum es für Sie vielleicht nicht funktioniert hat, ist der Kommentar in diesem Beitrag Es hat nicht in Java 1.5 funktioniert, funktioniert aber in 6 und danach.
Bearbeiten: Um es für bestimmte jars zu verweigern, müssen Sie entweder eine Richtliniendatei verwenden, zum Beispiel:
%Vor%Es gibt zwei Möglichkeiten, die Richtliniendatei anzugeben. Geben Sie sie entweder als Ergänzung zum Standard ein oder geben Sie nur die angegebenen an (Quelle ):
Wenn Sie
verwenden %Vor%(beachte das Double equals) dann wird nur die angegebene Richtliniendatei sein benutzt; alle die in der Datei mit den Sicherheitseigenschaften angegeben sind ignoriert.
... oder implementieren Sie einen benutzerdefinierten Sicherheitsmanager, der nicht so schwer aussieht . Hab das aber selbst nicht gemacht.
Tags und Links java security reflection policy securitymanager