Repositorio de Liberty[8.5.5.6 o posterior]

Desarrollo de un proveedor de autorización JAAC (Java Authorization Contract for Containers)

Puede desarrollar un proveedor JACC para disponer de las aplicaciones de decisiones de autorización personalizadas para Java™™ Platform, Enterprise Edition (J2EE) implementando la interfaz com.ibm.wsspi.security.authorization.jacc.ProviderService que se proporciona en el servidor de perfil Liberty.

Antes de empezar

De forma predeterminada, la carga del módulo de aplicación se difiere hasta que se esté procesando la solicitud en la aplicación; sin embargo, la restricción de seguridad del módulo completo en la aplicación debe procesarse antes de que la aplicación esté lista para su proceso. La carga del módulo diferida debe inhabilitarse. A continuación, se muestra cómo inhabilitarla:
  1. Para WebContainer:
    En el archivo server.xml, debe establecerse el siguiente elemento:
    <webContainer deferServletLoad="false"/>
  2. Para EJBContainer:
    En el archivo server.xml, debe establecerse el siguiente elemento:
    <ejbContainer startEJBsAtAppStart="true"/>
Nota: Si no se han establecido los elementos anteriores, es posible que no se propague toda la información de restricción de seguridad en el proveedor JACC de terceros tras el inicio del servidor. Como resultado, puede que no se aplique la decisión de autorización correcta por parte del proveedor JACC de terceros.

Acerca de esta tarea

La especificación Java Authorization Contract for Containers, JSR 115, define una interfaz para los proveedores de autorización. En el servidor de perfiles Liberty, debe empaquetar el proveedor JACC como una característica de usuario. La característica debe implementar la interfaz com.ibm.wsspi.security.authorization.jacc.ProviderService.

Procedimiento

  1. Cree un componente OSGi que proporcione un servicio que implemente la interfaz com.ibm.wsspi.security.authorization.jacc.ProviderService.

    La interfaz ProviderService define dos métodos: getPolicy, que el tiempo de ejecución del perfil Liberty invoca para recuperar una instancia de la clase de política que implementa la clase abstracta java.security.Policy; y getPolicyConfigFactory, que el tiempo de ejecución del perfil Liberty invoca para recuperar una instancia de su clase PolicyConfigurationFactory que implementa la clase abstracta javax.security.jacc.PolicyConfigurationFactory.

    En el ejemplo siguiente, se utilizan anotaciones de servicios declarativos de OSGi:
    @package com.mycompany.jacc;
    
    import com.mycompany.jacc.MyAuthConfigProvider;
    import com.ibm.wsspi.security.authorization.jacc.ProviderService;
    
    // El valor de propiedad de javax.security.jacc.policy.provider, que define la clase de implementación de Policy, y de
    // javax.security.jacc.PolicyConfigurationFactory.provider, que define la clase de implementación de PolicyConfigurationFactory, son necesarios para propagar las propiedades al tiempo de ejecución de Liberty. 
    @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 {
    // El tiempo de ejecución del perfil Liberty invoca este método
        // para obtener una instancia de la clase Policy
        @Override
        public Policy getPolicy() {
            return new myPolicy();
        }
    
        // El tiempo de ejecución del perfil Liberty invoca este método
        // para obtener una instancia de la clase PolicyConfigurationFactory
        @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) {
            // Lea aquí las propiedades de configuración del proveedor, si es necesario,
            // y páselas al ctor de Provider.
            // Este ejemplo lee las propiedades de
            // la definición del componente OSGi.
            configProps = (MapString, String) cc.getProperties();
        }
    
        protected void deactivate(ComponentContext cc) {}
    }
  2. Empaquete el componente en un paquete OSGi que forme parte de la característica de usuario, junto con el proveedor JACC.
  3. Asegúrese de que la característica incluya el contenido del subsistema OSGi: com.ibm.ws.javaee.jacc.1.5; ubicación:="dev/api/spec/".
  4. Una vez instalada la característica en la ubicación de la extensión del producto de usuario, configure el archivo server.xml con el nombre de la característica. Por ejemplo:
    <featureManager>
       ...
       <feature>usr:myJaccProvider</feature>
    </featureManager>

Icono que indica el tipo de tema Tema de tarea

Términos y condiciones para centros de información | Comentarios


Icono de indicación de fecha y hora Última actualización: 15 de junio de 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_developing_jacc_auth_provider
Nombre de archivo:twlp_developing_jacc_auth_provider.html