Me vais a permitir escribir una entrada en la que no doy solución a un problema (bueno, sí, pero no 100% correcta…) sino que me pregunto el origen del mismo.
Estos días he estado configurado Alfresco con soporte para autenticación LDAP. Aparentemente la configuración no es compleja, pero algo muy importante es seguir las buenas prácticas y hacer los cambios persistentes a cualquier cambio de versión, ante todo no modificando los ficheros de configuración ubicados dentro de nuestra aplicación desplegada.
En este caso, la idea es replicar la estructura de directorios y ficheros que queremos modificar dentro del directorio $TOMCAT_HOME/shared/classes/alfresco/extension.
En este caso, si por ejemplo quisieramos modificar el fichero ldap-synchronisation.properties que se encuentra en…
/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/ldap/ldap-authentication.properties
Tendríamos que copiarlo a una ruta como la siguiente, y entonces editarlo:
/opt/alfresco/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/ldap-synchronisation.properties
Nota: el directorio ldap1 es por ser nuestra autenticación personalizada, en alfresco-global.properties especificamos:
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap
De este modo, forzamos al servidor de aplicaciones a leer este fichero en lugar del desplegado. Si queréis más información al respecto, revisad la documentación de Alfresco, concretamente la sección Shared_Classpath_Folder:
Many customizations can be placed on your application server’s classpath, such as Alfresco configuration files or properties files i.e.
web-client-config-custom.xml
, and Spring context files orwebclient.properties
.
- For Tomcat, the shared classloader folder is
$TOMCAT_HOME/shared/classes/alfresco/
.
- For JBoss, the shared classloader folder is
$JBOSS_HOME/server/default/conf/alfresco/
.In this folder there are standard sub-directories:
- extension: for changes to the repository or Alfresco Explorer UI,
- web-extension: for changes to the Share UI,
- messages: for localization strings.
Files which are packaged as a JAR would be placed in the appropriate lib such as
$TOMCAT_HOME/shared/lib
.Files placed in these folders will overlay the relevant file in the appropriate WAR.
Bien, el tema de esta entrada es que en la versión que estoy utilizando (Alfresco 4.0.d Community (4003) schema 5025) no consigo que Tomcat de preferencia a estos ficheros, catalina.properties está correctamente especificado y en cambio todo lo que se configura en el fichero alfresco-global.properties sí que funciona, tras reiniciar siempre lee los ficheros del despliegue y por tanto intenta conectar con el LDAP por defecto:
035 ERROR [org.alfresco.repo.security.authentication.ldap.LDAPInitialDirContextFactoryImpl] Unable to connect to LDAP Server; check LDAP configuration javax.naming.CommunicationException: openldap.domain.com:389 [Root exception is java.net.UnknownHostException: [b]openldap.domain.com[/b]]
Tras toda una mañana revisándolo, finalmente me di por vencido y opte por añadir las configuraciones que deberían ir en ldap-synchronisation.properties dentro de alfresco-global.properties… y así funciona correctamente.
No es la solución más óptima, pero por lo menos no modificamos los ficheros que serán sobrescritos ante una actualización o tras desplegar el .war correspondiente. Esperaré a ver si actualizando a una versión superior el problema queda solucionado o si por el contrario realmente es fallo mío y se me escapa algo de la configuración.
Y esta es la historia del día ;)