Java-Sicherheit: Richtlinien und Berechtigungen besser verwalten

Die AccessController-Klasse ermöglicht eine abgestufte Zugriffskontrolle. Das ist seit Java 1.3 eines der Hauptfeatures des neuen Java-Sicherheitsmodells. Der Sicherheits-Manager wird aus Gründen der Abwärtskompatibilität immer noch in Java unterstützt. Doch inzwischen verwaltet die AccessController-Klasse die Zugriffskontrolle. Deshalb wird die Implementierung des Sicherheits-Managers der AccessController-Klasse in Java 2 nicht empfohlen. So lässt sich beispielsweise die Methode SecurityManager.checkRead(String Dateiname) wie folgt implementieren:


checkPermission(new FilePermission(fileName,"read"));

Und so sieht die entsprechende Methode SecurityManager.checkPermission(Permission Berechtigung) aus:


java.security.AccessController.checkPermission(permission);

Der Zugriff-Controller entscheidet, ob ein Zugriff gewährt wird. Dabei überprüft die Methode checkPermission(), ob der Code privilegiert ausgeführt werden muss. Falls das zutrifft, geht es mit der Methode doPrivileged() weiter. Der Zugriff-Controller liefert daneben eine Referenz auf den aktuellen Zugriffsverwaltungskontext. Das geschieht mit der Methode getContext().

Die AccessControlContext-Klasse verkapselt alle Informationen über Zugriffsparameter in der Anwendung. Sie kann eine oder mehrere ProtectionDomain-Klassen umfassen. Jede Klasse enthält Zugriffsrechte, die sich auf einen bestimmten Codeabschnitt beziehen. Für diesen Zweck stellt die ProtectionDomain-Klasse zwei weitere Klassen zur Verfügung:

  • Die PermissionCollection zum Speichern eines Satzes von Berechtigungen.
  • Die Klasse CodeSource zur Ablage von Informationen über den Speicherort des Codes in Form einer URL.

Die ProtectionDomain-Klasse speichert auch Signaturinformationen in der SignedBy-Klasse, die wiederum ein Array von Zertifikatsobjekten enthält. Code, der aus derselben Quelle stammt und von denselben Personen (also Identitäten) signiert wurde, befindet sich in derselben Protection-Domain. Die checkPermission()-Methode des AccessControlContext-Objekts überprüft die Zugriffsberechtigungen in Bezug auf ProtectionDomain-Objekte, die für den aktuellen Kontext gelten.

Für Aktionen, die Sonderrechte während der Ausführung erfordern, lässt sich die doPrivileged()-Methode einsetzen. Dabei kommt ein vereinfachtes Entscheidungsverfahren zum Einsatz. Es wird angenommen, dass die aufrufende Protection-Domain über die Berechtigung zur Ausführung privilegierter Operationen verfügt. Die Arbeit mit doPrivileged() erfolgt normalerweise über eine PrivilegedAction-Schnittstelle, die keine Ausnahmefehler generiert.


AccessController.doPrivileged(new PrivilegedAction() {
Public Object run() {
// Die privilegierte Aktion kann einen Wert oder "null" zurückgeben.
}
}
);

Der zweite Parameter für die doPrivileged()-Methode ist das AccessControlContext-Objekt. Es verweist auf einen korrekten Kontext, der zur Begrenzung des Zugriffs verwendet werden muss. Der Zugriff-Controller bietet daneben noch die getcontext()-Methode, um den Kontext zu bestimmen und zu verwenden.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Java-Sicherheit: Richtlinien und Berechtigungen besser verwalten

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *