{"id":2356,"date":"2013-09-22T12:31:31","date_gmt":"2013-09-22T10:31:31","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2356"},"modified":"2013-09-22T12:31:31","modified_gmt":"2013-09-22T10:31:31","slug":"rechte-permissions-und-mengenbeziehungen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/09\/rechte-permissions-und-mengenbeziehungen\/","title":{"rendered":"Rechte (Permissions) und Mengenbeziehungen"},"content":{"rendered":"<p>F\u00fcr jede geladene Klassen gilt eine Sammlung von Rechten, die f\u00fcr diese Klasse vergeben wurden. In der Regel wurden sie per Policy-Datei vergeben, doch nat\u00fcrlich sind auch andere M\u00f6glichkeiten denkbar. Diese Sammlung selbst wird in einem <b>PermissionCollection<\/b>-Objekt gespeichert, welches einer <b>ProtectionDomain<\/b> zugeordnet ist.<\/p>\n<pre>ProtectionDomain domain = ListPermissions.class.getProtectionDomain();\nPermissionCollection permissonColl = Policy.getPolicy().getPermissions( domain );<\/pre>\n<p>Dem <b>PermissionCollection<\/b>-Objekt l\u00e4sst sich mit einer <b>Enumeration<\/b> die gespeicherten <b>Permission<\/b>s rauskitzeln. Ein <b>System.out<\/b> liefert ebenso eine sch\u00f6ne Ausgabe, etwa f\u00fcr das eigene Programm <b>ListPermissions<\/b> ohne Sicherheitsmanager:<\/p>\n<pre>java.security.Permissions@c21495 (\n(java.util.PropertyPermission java.specification.vendor read)\n(java.util.PropertyPermission java.vm.specification.vendor read)\n(java.util.PropertyPermission path.separator read)\n(java.util.PropertyPermission java.vm.name read)\n(java.util.PropertyPermission java.class.version read)\n(java.util.PropertyPermission os.name read)\n(java.util.PropertyPermission java.vendor.url read)\n(java.util.PropertyPermission java.vendor read)\n(java.util.PropertyPermission java.vm.vendor read)\n(java.util.PropertyPermission file.separator read)\n(java.util.PropertyPermission os.version read)\n(java.util.PropertyPermission java.vm.version read)\n(java.util.PropertyPermission java.version read)\n(java.util.PropertyPermission line.separator read)\n(java.util.PropertyPermission java.vm.specification.version read)\n(java.util.PropertyPermission java.specification.name read)\n(java.util.PropertyPermission java.vm.specification.name read)\n(java.util.PropertyPermission java.specification.version read)\n(java.util.PropertyPermission os.arch read)\n(java.lang.RuntimePermission exitVM)\n(java.lang.RuntimePermission stopThread)\n(java.net.SocketPermission localhost:1024- listen,resolve)\n(java.io.FilePermission \\D:\\JavaBook\\programme\\24_Sicherheitskonzepte\\- read)\n)<\/pre>\n<p>Die Rechte sind nat\u00fcrlich genau diejenigen, die vom System bereitgestellt worden sind. Sie beziehen sich genau auf unsere Klasse <b>ListPermissions<\/b>. F\u00fcr die Systemklassen, wie <b>java.lang.Object<\/b> oder<b>String<\/b> gelten keine Einschr\u00e4nkungen. Ersetzen wie <b>ListPermissions<\/b> durch Objekt, so w\u00fcrde ein <b>System.out<\/b> genau die alles-erlaubende Permission ergeben:<\/p>\n<pre>(java.security.AllPermission &lt;all permissions&gt; &lt;all actions&gt;)<\/pre>\n<h3>Schlie\u00dft eine Permission eine andere Permission ein?<\/h3>\n<p><b>Permission<\/b>-Objekte definieren selbst nicht nur Rechte f\u00fcr spezielle Eigenschaften (Lesen in einem speziellen Verzeichnis), sondern ziehen auch Recht f\u00fcr andere Eigenschaften nach sich (Lesen aller Dateien ab einem Verzeichnis). Wird etwa f\u00fcr ein Verzeichnis das Recht auf Lesen und Schreiben gesetzt, dann impliziert dies auch das Lesen. Die F\u00e4higkeit, dass ein Recht ein anderes bedingt, ist eine F\u00e4higkeit der Permission-Objekte. Die Klasse bietet eine <b>implies()<\/b>-Funktion, die testet, ob eine <b>Permission<\/b> eine andere <b>Permission<\/b> einschlie\u00dft.<\/p>\n<p>Beispiel: Wir wollen zwei <b>FilePermission<\/b>-Objetke anlegen, wobei das erste (<b>perm1<\/b>) das zweite (<b>perm2<\/b>) einschlie\u00dft.<\/p>\n<pre>import java.io.FilePermission;\nimport java.security.Permission;\n\npublic class PermissionImplies\n{\n  public static void main( String args[] )\n  {\n    Permission perm1 = new FilePermission( &quot;c:\\\\windows\\\\*&quot;, &quot;read,write&quot; );\n    Permission perm2 = new FilePermission( &quot;c:\\\\windows\\\\fonts&quot;, &quot;read&quot; );\n    \n    if ( perm1.implies(perm2) )\n      System.out.println( perm1 + &quot; implies &quot; + perm2 );\n    \n    if ( !perm2.implies( new FilePermission(&quot;c:\\\\windows\\\\fonts&quot;, &quot;write&quot;) ) )\n      System.out.println( perm1 + &quot; not implies &quot; + perm2 );\n  }\n}<\/pre>\n<p>Die Ausgabe zeigt, dass diese Rechte vom System korrekt unterst\u00fctzt werden.<\/p>\n<pre>(java.io.FilePermission c:\\windows\\* read,write) implies (java.io.FilePermission c:\\windows\\fonts read)\n(java.io.FilePermission c:\\windows\\* read,write) not implies (java.io.FilePermission c:\\windows\\fonts read)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr jede geladene Klassen gilt eine Sammlung von Rechten, die f\u00fcr diese Klasse vergeben wurden. In der Regel wurden sie per Policy-Datei vergeben, doch nat\u00fcrlich sind auch andere M\u00f6glichkeiten denkbar. Diese Sammlung selbst wird in einem PermissionCollection-Objekt gespeichert, welches einer ProtectionDomain zugeordnet ist. ProtectionDomain domain = ListPermissions.class.getProtectionDomain(); PermissionCollection permissonColl = Policy.getPolicy().getPermissions( domain ); Dem PermissionCollection-Objekt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-2356","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2356"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2356\/revisions"}],"predecessor-version":[{"id":2357,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2356\/revisions\/2357"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}