3 nov 2011

Usando un usuario para todas las conexiones de Site Studio for External Applications (SSXA)

En una de las aplicaciones que estoy trabajando actualmente se nos ha dado la necesidad de utilizar un único usuario para todas las consultas que se hacen en UCM.

Si estamos familiarizados con WebCenter y su integración con UCM, es tan sencillo como crear un "External App" que haga el login/password del usuario que le indicamos, y todas las operaciones que se realicen hacia el content server serán con dicho usuario.

Buceando por las librerías de SSXA, he visto que si la aplicación hace login y tenemos el usuario en sesión, éste es el usado para las consultas.


Podemos ver en la clase oracle.stellent.wcm.client.ClientApplication.java de la librería oracle.ucm.wcm.core-11.1.1.jar la siguientes líneas de código.


    Principal principal = request.getUserPrincipal();
    if (principal != null)
    {
      siteContext.setIdcContext(new IdcContext(principal.getName()));
    }


Como vemos, se recupera el usuario de sesión y con este se crea la conexión a RIDC para consultar en UCM.

Sobreescribimos la clase, creando el paquete oracle.stellent.wcm.client en mi proyecto y dentro de el la clase ClientApplication.java

Modificamos las líneas anteriores para que ponga un usuario directo, por ejemplo:

siteContext.setIdcContext(new IdcContext("mi-usuario"))


Con la clase modificada debemos seguir con la segunda parte.

Se debe alterar el classloader de la aplicación y de Weblogic para que usen nuestra nueva clase en vez de la original desplegada en la shared-library de UCM.

Copiamos el JAR oracle.ucm.wcm.core-11.1.1.jar al proyecto y vamos al menú Application - Project properties



Seleccionamos añadir nueva librería
Indicamos que se trata de una nueva

Creamos la nueva seleccionando el JAR oracle.ucm.wcm.core-11.1.1.jar y de nombre SSXA-Override con la opción de "deployed by default"


Quedando asignada en mi proyecto la nueva librería, es importante que la pongamos por encima de la librería estándar de Site Studio.



Ahora vamos a modificar el fichero weblogic.xml para que incluya la siguiente entrada:


  <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>

Modificamos también el weblogic-application.xml para que incluya la siguiente entrada:


  <prefer-application-packages>
    <package-name>oracle.stellent.wcm.client.*</package-name>
    <package-name>oracle.stellent.wcm.core.idc.*</package-name>
  </prefer-application-packages>

Con esto hemos finalizado, desplegamos la aplicación y probamos los cambios. Aunque la aplicación haga login los contenidos mostrados son aquellos a los que el usuario que pusimos arriba tiene acceso.