Uso librería de integración java: Autenticación
- Área: GUIA: Gestión Unificada de Identidades de Andalucía
- Carácter del recurso: Recomendado
- Fases del ciclo de vida: Construcción del Sistema de Información (CSI)
- Perfiles: Programador
Descripción
Se muestra un ejemplo para la autenticación de usuarios utilizando las librerías de integración.
Requisitos
- Java 1.6
- Maven 2.2.1
- Conectividad con el Repositorio de Librerías de la Junta de Andalucía
- La JVM confía en certificados de servidor del OVD:
- Certificado de la autoridad certificadora, CA, del certificado utilizado por OVD.
- El propio certificado de servidor.
Ejemplo
Creación del proyecto utilizando maven
Ejecutamos el siguiente comando maven que creará el proyecto correspondiente:
$> mvn archetype:create -DgroupId=com.test -DartifactId=authtest
Referencia a las librerías (pom.xml)
Dentro de la carpeta authtest, creada en el paso anterior, encontramos el fichero pom.xml. Modificamos dicho fichero para incluir la librería de integración mag4j que nos da acceso a la autenticación. Aquí vemos el contenido final de dicho fichero.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>authtest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>authtest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>es.juntadeandalucia.guia</groupId>
<artifactId>mag4j</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.8</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}-${version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>
</project>
Fichero de propiedades
Creamos el fichero $/authtest/src/test/resources/mag4j.properties
En dicho fichero se definen: los parámetros de conexión al directorio, la cuenta de servicio y la contraseña para realizar dicha conexión. Se muestra un ejemplo del mismo en el que habrá que establecer los valores oportunos1.
initialContextFactory = com.sun.jndi.ldap.LdapCtxFactory
#host = ldap://172.18.24.29:389
host = ldaps://directoriovirtual.ves.i-administracion.junta-andalucia.es:636
authMode = simple
baseDN = o=personas,o=identidades,o=comun,dc=juntadeandalucia,dc=es
#cuenta de servicio para conectarse al OVD
oidUserDN = cn=cs_ejemplo,o=servicios,o=identidades,o=comun,dc=juntadeandalucia,dc=es
oidPassword = passwordejemplo
#donde y como buscar el usuario
userSearchFilter=(&(objectclass=inetorgperson)(cn={0}))
truststore_location=/tmp/almacen
truststore_password=myStorePassword
#para el ApplicationAuthenticator
applicationAuthenticatorClass=es.juntadeandalucia.guia.mag4j.app.ApplicationAuthenticatorImpl
loggedUserAttribute =
#app_user
loginResourcePath =
#/login.jsp
requestUserParameter =
#user
requestPasswordParameter =
#password
Clase java de ejemplo
Por último modificamos la clase test de ejemplo generada por maven en $/authtest/src/test/java/com/test/AppTest.java
package com.test;import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import es.juntadeandalucia.guia.mag4j.auth.MaG4JAuthenticationImpl;
import es.juntadeandalucia.guia.mag4j.spec.MaG4JAuthentication;
import es.juntadeandalucia.guia.mag4j.spec.MaG4JAuthenticator;
import es.juntadeandalucia.guia.mag4j.spec.MaG4JException;
import es.juntadeandalucia.guia.mag4j.spec.UserData;
import es.juntadeandalucia.guia.mag4j.util.PropertiesLoader;
/**
*Unit test for simple App.
*/
public class AppTest {
private final Logger log = Logger.getLogger(AppTest.class);
private MaG4JAuthentication authentication = null;
public static void main (String args[]) {
AppTest test = new AppTest();
try {
test.init();
test.authenticate();
} catch (MaG4JException e) {
e.printStackTrace();
}
}
public MaG4JAuthentication getAuthentication() {
return authentication;
}
@Before
public void init() throws MaG4JException{
Properties mag4j_properties = loadDefaultProperties();
authentication = createMaG4JAuthentication(mag4j_properties);
}
@Test
public void authenticate(){
String cn = "100000200";
String password = "abc123";
try {
MaG4JAuthenticator a = this.getAuthentication().getAuthenticator();
UserData user = a.authenticate(cn, password);
if(user==null) {
log.warn("Usuario no encontrado ["+cn+"] ["+password+"]");
fail();
} else {
System.out.println("OK: ["+cn+"] ["+password+"]");
}
} catch (MaG4JException e) {
log.error(e.getMessage(),e);
fail();
}
}
//********************************************************************
private MaG4JAuthentication createMaG4JAuthentication(Properties p) throws MaG4JException {
MaG4JAuthentication m = new MaG4JAuthenticationImpl();
m.init(p);
return m;
}
//*********************************
private Properties loadProperties(String resourcepath) throws MaG4JException {
try {
return PropertiesLoader.loadFromClassPath(resourcepath);
} catch (IOException e) {
throw new MaG4JException("No se pudo leer el recurso " + resourcepath);
}
}
private Properties loadDefaultProperties() throws MaG4JException {
return loadProperties(PropertiesLoader.DEFAULT_PROPERTIES_PATH);
}
}
La clase simplemente lee el fichero de propiedades, inicializa la conexión y autentica un usuario cuyo cn y contraseña se establecen en el propio código fuente.
Ejecución del ejemplo
Para probar el ejemplo ejecutamos el siguiente comando maven que debería dar un resultado correcto:
$> mvn test
…
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
Contenidos relacionados
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0433 | Obtención e instalación de certificados en clientes J2EE | Referencia | Recomendado |