Référentiel Liberty[8.5.5.6 ou ultérieure]

Développement d'un fournisseur d'autorisation Java Authorization Contract for Containers (JACC)

Vous pouvez développer un fournisseur JACC afin de disposer de décisions d'autorisation personnalisées pour les applications Java™™ Platform, Enterprise Edition (J2EE), en implémentant l'interface com.ibm.wsspi.security.authorization.jacc.ProviderService qui est fournie sur le serveur de profil Liberty.

Avant de commencer

Par défaut, le chargement du module d'application est reporté jusqu'à ce que la demande sur l'application soit traitée ; toutefois, la contrainte de sécurité de tout le module dans l'application doit être traitée avant que l'application soit prête à être traitée. Le chargement du module différé doit être désactivé. La procédure suivante indique comment effectuer cette désactivation :
  1. Pour le conteneur Web :
    Dans le fichier server.xml, les éléments suivants doivent être définis :
    <webContainer deferServletLoad="false"/>
  2. Pour le conteneur d'EJB :
    Dans le fichier server.xml, les éléments suivants doivent être définis :
    <ejbContainer startEJBsAtAppStart="true"/>
Remarque : Si les éléments précédents ne sont pas définis, les informations de contrainte de sécurité complètes ne peuvent peut-être pas être propagées au fournisseur JACC tiers au démarrage du serveur. Par conséquent, la décision d'autorisation correcte peut pas être mise en oeuvre par le fournisseur JACC tiers.

Pourquoi et quand exécuter cette tâche

La spécification Java Authorization Contract for Containers, JSR 115, définit une interface pour les fournisseurs d'autorisation. Dans le serveur de profil Liberty, vous devez packager votre fournisseur JACC en tant que fonction utilisateur. Votre fonction doit implémenter l'interface com.ibm.wsspi.security.authorization.jacc.ProviderService.

Procédure

  1. Créez un composant OSGi qui fournit un service qui implémente l'interface com.ibm.wsspi.security.authorization.jacc.ProviderService.

    L'interface ProviderService définit deux méthodes : getPolicy, que l'environnement d'exécution du profil Liberty appelle pour extraire une instance de votre classe Policy class implémentant la classe abstraite java.security.Policy et getPolicyConfigFactory, que l'environnement d'exécution du profil Liberty appelle pour extraire une instance de votre classe PolicyConfigurationFactory implémentant la classe abstraite javax.security.jacc.PolicyConfigurationFactory.

    L'exemple suivant utilise les annotations de services déclaratifs OSGi :
    @package com.mycompany.jacc;
    
    import com.mycompany.jacc.MyAuthConfigProvider;
    import com.ibm.wsspi.security.authorization.jacc.ProviderService;
    
    // The property value of javax.security.jacc.policy.provider which defines the implementation class of Policy and
    // javax.security.jacc.PolicyConfigurationFactory.provider which defines the implementation class of PolicyConfigurationFactory, are required for propagating the properties to the Liberty runtime.
    
    @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 {
    // This method called by the Liberty profile runtime
        // to get an instance of Policy class
        @Override
        public Policy getPolicy() {
            return new myPolicy();
        }
    
        // This method called by the Liberty profile runtime
        // to get an instance of PolicyConfigurationFactory class
        @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) {
            // Read provider config properties here if needed,
            // then pass them to the Provider ctor.
            // This example reads the properties from the OSGi
            // component definition.
            configProps = (MapString, String) cc.getProperties();
        }
    
        protected void deactivate(ComponentContext cc) {}
    }
  2. Packagez le composant dans un bundle OSGi qui fait partie de votre fonction, avec votre fournisseur JACC.
  3. Assurez-vous que votre fonction inclut le contenu de sous-système OSGi : com.ibm.ws.javaee.jacc.1.5; location:="dev/api/spec/".
  4. Une fois la fonction installée dans l'emplacement d'extension de produit utilisateur, configurez le fichier server.xml avec le nom de la fonction. Par exemple :
    <featureManager>
       ...
       <feature>usr:myJaccProvider</feature>
    </featureManager>

Icône indiquant le type de rubrique Rubrique Tâche

Dispositions pour les centres de documentation | Commentaires


Icône d'horodatage Dernière mise à jour: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_developing_jacc_auth_provider
Nom du fichier : twlp_developing_jacc_auth_provider.html