Liberty-Repository[8.5.5.6 oder höher]

JACC-Provider (Java Authorization Contract for Containers) entwickeln

Sie können einen JACC-Provider entwickeln, um angepasste Berechtigungsentscheidungen für J2EE-Anwendungen (Java™™ Platform, Enterprise Edition) zu treffen, indem Sie die mit dem Liberty Profile-Server bereitgestellte Schnittstelle com.ibm.wsspi.security.authorization.jacc.ProviderService implementieren.

Vorbereitende Schritte

Standardmäßig wird das Laden des Anwendungsmoduls verzögert, bis die an die Anwendung gerichtete Anforderung verarbeitet wird, allerdings muss, bevor die Anwendung zur Verarbeitung bereit ist, die Integritätsbedingung für die Sicherheit des gesamten Moduls verarbeitet werden. Das verzögerte Modul muss inaktiviert werden. Gehen Sie wie folgt vor, um das Modul zu inaktivieren:
  1. Für den Web-Container:
    In der Datei server.xml muss das folgende Element festgelegt werden:
    <webContainer deferServletLoad="false"/>
  2. Für den EJB-Container:
    In der Datei server.xml muss das folgende Element festgelegt werden:
    <ejbContainer startEJBsAtAppStart="true"/>
Anmerkung: Wenn die vorherigen Elemente nicht festgelegt wurden, werden sämtliche Informationen der Integritätsbedingung für die Sicherheit beim Start des Servers möglicherweise nicht an den JACC-Provider eines Drittanbieters weitergegeben. Folglich ist es möglich, dass der JACC-Provider eines Drittanbieters nicht die richtige Berechtigungsentscheidung durchsetzt.

Informationen zu diesem Vorgang

Die JSR 115 (Java Specification Request) für die Spezifikation "Java Authorization Contract for Containers" definiert eine Schnittstelle für Berechtigungsprovider. Im Liberty Profile-Server müssen Sie Ihren JACC-Provider als Benutzerfeature packen. Ihr Feature muss die Schnittstelle com.ibm.wsspi.security.authorization.jacc.ProviderService implementieren.

Vorgehensweise

  1. Erstellen Sie eine OSGi-Komponente, die einen Service bereitstellt, der die Schnittstelle com.ibm.wsspi.security.authorization.jacc.ProviderService implementiert.

    Die Schnittstelle ProviderService definiert zwei Methoden: getPolicy und getPolicyConfigFactory. Erstere wird von der Laufzeit des Liberty-Profils aufgerufen, um eine Instanz Ihrer Policy-Klasse abzurufen, die die abstrakte Klasse java.security.Policy implementiert. Die zweite Klasse wird von der Laufzeit des Liberty-Profils aufgerufen, um eine Instanz der Klasse PolicyConfigurationFactory, die die abstrakte Klasse javax.security.jacc.PolicyConfigurationFactory implementiert, abzurufen.

    Im folgenden Beispiel werden Annotationen für OSGi Declarative Services verwendet:
    @package com.mycompany.jacc;
    
    import com.mycompany.jacc.MyAuthConfigProvider;
    import com.ibm.wsspi.security.authorization.jacc.ProviderService;
    
    // Der Eigenschaftswert von javax.security.jacc.policy.provider, der die Implementierungsklasse von Policy und
    // javax.security.jacc.PolicyConfigurationFactory.provider definiert, die wiederum die Implementierungsklasse von
    // PolicyConfigurationFactory definiert, sind für die Weitergabe der Eigenschaften an die Liberty-Laufzeit erforderlich.
    
    @Component(service = ProviderService.class,
               immediate = true,
               property = {
                           "javax.security.jacc.policy.provider
                             =com.mycompany.jacc.MyPolicy",
                           "javax.security.jacc.PolicyConfigurationFactory.provider
                             =com.mycompany.jacc.MyPolicyConfigurationFactoryImpl"
                          }
              )
    public class MyJaccProviderService implements ProviderService {
    // Diese Methode wird von der Laufzeit des Liberty-Profils aufgerufen,
    // um eine Instanz der Policy-Klasse abzurufen
        @Override
        public Policy getPolicy() {
            return new myPolicy();
        }
    
        // Diese Methode wird von der Laufzeit des Liberty-Profils aufgerufen,
        // um eine Instanz der Klasse PolicyConfigurationFactory abzurufen
        @Override
        public Policy getPolicyConfigurationFactory() {
            ClassLoader cl = null;
            PolicyConfigurationFactory pcf = null;
            System.setProperty(JACC_FACTORY, JACC_FACTORY_IMPL);
            try  {
                cl = Thread.currentThread().getContextClassLoader();
                Thread.currentThread().setContextClassLoader(
                                  this.getClass().getClassLoader());
                pcf = PolicyConfigurationFactory.getPolicyConfigurationFactory();
            } catch (Exception e) {
                return null;
            } finally {
                Thread.currentThread().setContextClassLoader(cl);
            }
            return pcf;
        }
    
        protected void activate(ComponentContext cc) {
            // Die Konfigurationseigenschaften des Providers können bei Bedarf hier gelesen
            // und dann an die AuthConfigProvider-Factory übergeben werden.
            // In diesem Beispiel werden die Eigenschaften aus der
            // OSGi-Komponentendefinition gelesen.
            configProps = (MapString, String) cc.getProperties();
        }
    
        protected void deactivate(ComponentContext cc) {}
    }
  2. Packen Sie die Komponente zusammen mit Ihrem JACC-Provider in ein OSGi-Bundle, das Teil Ihres Benutzerfeatures ist.
  3. Vergewissern Sie sich, dass Ihr Feature den Inhalt des OSGi-Subsystems einschließt: com.ibm.ws.javaee.jacc.1.5; location:="dev/api/spec/".
  4. Nachdem das Feature im Verzeichnis der benutzerspezifischen Produkterweiterung installiert ist, konfigurieren Sie die Datei server.xml mit dem Featurenamen. Beispiel:
    <featureManager> 
       ...
       <feature>usr:myJaccProvider</feature>
    </featureManager>

Symbol das den Typ des Artikels anzeigt. Taskartikel

Nutzungsbedingungen für Information Center | Feedback


Symbol für Zeitmarke Letzte Aktualisierung: 25.08.2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_developing_jacc_auth_provider
Dateiname: twlp_developing_jacc_auth_provider.html