---
title: 'Rechte (Permissions) und Mengenbeziehungen'
url: 'https://tutego.de/blog/javainsel/2013/09/rechte-permissions-und-mengenbeziehungen'
markdown: 'https://tutego.de/blog/javainsel/2013/09/rechte-permissions-und-mengenbeziehungen.md'
date: '2013-09-22'
description: 'Für jede geladene Klassen gilt eine Sammlung von Rechten, die für diese Klasse vergeben wurden. In der Regel wurden sie per Policy-Datei vergeben, doch natürlich sind auch andere Möglichkeiten denkbar. Diese Sammlung selbst wird in einem PermissionCollection-Objekt gespeichert, welches einer Protec…'
taxonomy:
  category:
    - Allgemein
---

# Rechte (Permissions) und Mengenbeziehungen

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## Rechte (Permissions) und Mengenbeziehungen

22.09.2013 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Für jede geladene Klassen gilt eine Sammlung von Rechten, die für diese Klasse vergeben wurden. In der Regel wurden sie per Policy-Datei vergeben, doch natürlich sind auch andere Möglichkeiten denkbar. Diese Sammlung selbst wird in einem **PermissionCollection**-Objekt gespeichert, welches einer **ProtectionDomain** zugeordnet ist.

```java
ProtectionDomain domain = ListPermissions.class.getProtectionDomain();
PermissionCollection permissonColl = Policy.getPolicy().getPermissions( domain );
```

Dem **PermissionCollection**-Objekt lässt sich mit einer **Enumeration** die gespeicherten **`Permission`**s rauskitzeln. Ein **System.out** liefert ebenso eine schöne Ausgabe, etwa für das eigene Programm **ListPermissions** ohne Sicherheitsmanager:

```text
java.security.Permissions@c21495 (
(java.util.PropertyPermission java.specification.vendor read)
(java.util.PropertyPermission java.vm.specification.vendor read)
(java.util.PropertyPermission path.separator read)
(java.util.PropertyPermission java.vm.name read)
(java.util.PropertyPermission java.class.version read)
(java.util.PropertyPermission os.name read)
(java.util.PropertyPermission java.vendor.url read)
(java.util.PropertyPermission java.vendor read)
(java.util.PropertyPermission java.vm.vendor read)
(java.util.PropertyPermission file.separator read)
(java.util.PropertyPermission os.version read)
(java.util.PropertyPermission java.vm.version read)
(java.util.PropertyPermission java.version read)
(java.util.PropertyPermission line.separator read)
(java.util.PropertyPermission java.vm.specification.version read)
(java.util.PropertyPermission java.specification.name read)
(java.util.PropertyPermission java.vm.specification.name read)
(java.util.PropertyPermission java.specification.version read)
(java.util.PropertyPermission os.arch read)
(java.lang.RuntimePermission exitVM)
(java.lang.RuntimePermission stopThread)
(java.net.SocketPermission localhost:1024- listen,resolve)
(java.io.FilePermission \D:\JavaBook\programme\24_Sicherheitskonzepte\- read)
)
```

Die Rechte sind natürlich genau diejenigen, die vom System bereitgestellt worden sind. Sie beziehen sich genau auf unsere Klasse **ListPermissions**. Für die Systemklassen, wie **`java.lang.Object`** oder**`String`** gelten keine Einschränkungen. Ersetzen wie **ListPermissions** durch Objekt, so würde ein **System.out** genau die alles-erlaubende `Permission` ergeben:

```text
(java.security.AllPermission  )
```

### Schließt eine `Permission` eine andere `Permission` ein?

**`Permission`**-Objekte definieren selbst nicht nur Rechte für spezielle Eigenschaften (Lesen in einem speziellen Verzeichnis), sondern ziehen auch Recht für andere Eigenschaften nach sich (Lesen aller Dateien ab einem Verzeichnis). Wird etwa für ein Verzeichnis das Recht auf Lesen und Schreiben gesetzt, dann impliziert dies auch das Lesen. Die Fähigkeit, dass ein Recht ein anderes bedingt, ist eine Fähigkeit der `Permission`-Objekte. Die Klasse bietet eine **`implies()`**-Funktion, die testet, ob eine **`Permission`** eine andere **`Permission`** einschließt.

Beispiel: Wir wollen zwei **`FilePermission`**-Objetke anlegen, wobei das erste (**perm1**) das zweite (**perm2**) einschließt.

```java
import java.io.FilePermission;
import java.security.Permission;

public class PermissionImplies
{
  public static void main( String args[] )
  {
    Permission perm1 = new FilePermission( "c:\\windows\\*", "read,write" );
    Permission perm2 = new FilePermission( "c:\\windows\\fonts", "read" );

    if ( perm1.implies(perm2) )
      System.out.println( perm1 + " implies " + perm2 );

    if ( !perm2.implies( new FilePermission("c:\\windows\\fonts", "write") ) )
      System.out.println( perm1 + " not implies " + perm2 );
  }
}
```

Die Ausgabe zeigt, dass diese Rechte vom System korrekt unterstützt werden.

```text
(java.io.FilePermission c:\windows\* read,write) implies (java.io.FilePermission c:\windows\fonts read)
(java.io.FilePermission c:\windows\* read,write) not implies (java.io.FilePermission c:\windows\fonts read)
```

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/)

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Parametersammlungen im Servlet mit getParameterValues() auslesen](https://tutego.de/blog/javainsel/2013/09/parametersammlungen-im-servlet-mit-getparametervalues-auslesen.md)
- Next: [In Servlets Seiten über HTTP-Redirect umlenken](https://tutego.de/blog/javainsel/2013/09/in-servlets-seiten-ber-http-redirect-umlenken.md)
