Applicazioni OSGi e Java 2 Security

È possibile utilizzare la sicurezza Java™ 2 nelle applicazioni OSGi in un modo simile alla sicurezza Java 2 nelle applicazioni Java EE . Questo argomento descrive gli aspetti specifici dell'utilizzo di Java 2 Security in una applicazione OSGi.

Le specifiche OSGi consentono di avere file permissions.perm nella directory OSGI-INF di ciascun bundle, in modo che sia possibile applicare un controllo dettagliato alle autorizzazioni per ciascun bundle. L'implementazione delle applicazioni OSGi in WebSphere® Application Server supporta questa specifica e consente anche di avere un file permissions.perm nella directory META-INF dell'applicazione OSGi, che fornisce un controllo più generico delle autorizzazioni per l'applicazione nel suo complesso.

Un file permissions.perm è un file di testo semplice che contiene commenti o autorizzazioni a riga singola nel seguente modulo:
# Permissions file
( org.osgi.framework.AdminPermission "*" "*" )
( org.osgi.framework.PackagePermission "*" "exportonly,import" )
( org.osgi.framework.ServicePermission "*" "get,register")
( org.osgi.framework.BundlePermission "*" "host,provide,fragment")

Relazione con applicazioni Java EE e file was.policy

Questi file permissions.perm a livello di applicazione hanno una funzione simile ai file was.policy nelle applicazioni enterprise. Quando si converte un'applicazione da Java EE a OSGi, qualsiasi file was.policy esistente viene convertito in un file permissions.perm da utilizzare con il framework delle autorizzazioni OSGi.

Nella conversione, tutti i codebase specificati nel file was.policy vengono ignorati e tutte le autorizzazioni specificate vengono aggiunte al file permissions.perm . Ciò significa che tutte le autorizzazioni vengono promosse a livello applicazione. Se è necessaria una maggiore granularità, è possibile modificare il file dopo la conversione. In questo caso, rimuovere le autorizzazioni richieste dal file permissions.perm risultante e spostarle nei file di autorizzazione all'interno della directory OSGI-INF per ciascun bundle interessato.

Autorizzazioni e limitazioni di default

Ogni applicazione OSGi ha le seguenti limitazioni e autorizzazioni predefinite, indipendentemente dal fatto che abbia o meno un file permissions.perm . È possibile utilizzare un file permissions.perm per aggiungere ulteriori limitazioni e autorizzazioni o per sovrascrivere le limitazioni e le autorizzazioni predefinite.

Limitazioni predefinite:
("org.osgi.framework.ServicePermission", "org.osgi.service.condpermadmin.ConditionalPermissionAdmin", "*")
("org.osgi.framework.ServicePermission", "org.osgi.service.permissionadmin.PermissionAdmin", "*")
("org.osgi.framework.ServicePermission", "org.osgi.service.framework.CompositeBundleFactory", "*")
("org.osgi.framework.ServicePermission", "org.osgi.framework.hooks.service.*", "*")
("org.osgi.framework.ServicePermission", "org.osgi.service.packageadmin.PackageAdmin", "*")
Default permissions:
("org.osgi.framework.PackagePermission", "*", "import")
("org.osgi.framework.BundlePermission", "*", "host,provide,fragment")
Qualsiasi applicazione OSGi che non ha un file permissions.perm ha anche le seguenti autorizzazioni aggiuntive:
("java.io.FilePermission", "<application_path>/-", "read,write")
("java.io.FilePermission", "<application_configpath>/-", "read")
("java.lang.RuntimePermission", "loadLibrary.*", "*")
("java.lang.RuntimePermission", "queuePrintJob", "*")
("java.net.SocketPermission", "*", "connect")
("java.util.PropertyPermission", "*", "read")
("org.osgi.framework.PackagePermission", "*", "exportonly,import")
("org.osgi.framework.ServicePermission", "*", "get,register")