Consultor tecnológico de desarrollo de proyectos informáticos.
Ingeniero en Informática, especialidad en Ingeniería del Software
Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación
Somos expertos en Java/J2EE
Fecha de publicación del tutorial: 2010-09-25
CAS: Validador personalizado
0. Índice de contenidos.
1. Introducción
Antes de seguir este tutorial os recomiendo que le echéis un vistazo al anterior de introducción a CAS, para entender de que se trata y poder instalar el producto. Introducción a CAS.También os puede interesar personalizar la interfaz de CAS, podéis encontrar cómo en este tutorial CAS: Personalización de la interfaz
En este vamos a abordar como cambiar el validador que viene por defecto con CAS, que consiste en comparar usuario y contraseña y si son iguales darlo por bueno, por uno un poco más elaborado que acceda a una base de datos para ver si el usuario con esa contraseña existe.
2. Entorno
Este tutorial está escrito usando el siguiente entorno:- Hardware: Portátil Mac Book Pro 17" (2,6 Ghz Intel Core i7, 8 GB DDR3)
- Sistema Operativo: Mac OS X Snow Leopard 10.6.4
- CAS Server 3.4.2.1
3. Creación del validador
Para crear el validador tenemos que crear un proyecto y que mejor forma
de hacerlo que con Maven. Para ello vamos a abrir un terminal y
ejecutar:mvn archetype:create -DgroupId=com.autentia.casdemo -DartifactId=casdemoAhora editamos el fichero pom.xml del proyecto para añadir las siguientes dependencias:
Lo siguiente que tenemos que hacer es crear una nueva clase que herede de la clase AbstractUsernamePasswordAuthenticationHandler lo que nos obliga a implementar el método authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials) donde recibimos el usuario y la contraseña del usuario que se quiere logar. Un ejemplo de implementación podría ser este:4.0.0 com.autentia.democas democas 1.0-SNAPSHOT jar democas http://maven.apache.org UTF-8 junit junit 3.8.1 test org.jasig.cas cas-server-core 3.4.2.1
public class DemoCasValidador extends AbstractUsernamePasswordAuthenticationHandler{
public boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials)
{
String username = credentials.getUsername();
String password = credentials.getPassword();
boolean valid = false;
Connection con = null;
Statement sta = null;
ResultSet rs = null;
try {
//Establecemos la conexión con el datasource
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource dataSource = (DataSource) envCtx.lookup("jdbc/democas");
con = dataSource.getConnection();
con.setAutoCommit(false);
//Instanciamos la sentencia
sta = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//Ejecutamos la query de validación
StringBuilder sql = new StringBuilder("SELECT USERNAME FROM USERS WHERE USERNAME = '").append(username).append("' AND PASSWORD ='").append(password).append("'");
rs = sta.executeQuery(sql.toString());
//Si el ResultSet tiene datos quiere decir que el usuario es válido
valid = rs.next();
} catch (ConfigurationException e) {
e.printStackTrace();
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
//Cerrramos la conexión
rs.close();
sta.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return valid;
}
}
4. Configuración de CAS
Una vez implementado el validador tenemos que configurar CAS para que lo utilice en vez del que utiliza por defecto. Para ello vamos a empaquetar nuestro proyecto ejecutando en un terminal "mvn clean package", el .war resultante lo copiamos dentro de la carpeta %CAS_WEBAPP_HOME%/WEB-INF/lib para que la clase pueda ser accedida por CAS.Por último, tenemos que editar el fichero %CAS_WEBAPP_HOME%/WEB-INF/deployerConfigContext.xml, buscamos la sección "authenticationHandlers" y sustituimos la clase que trae por defecto ("org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler") por la nuestra (com.autentia.democas.DemoCasValidador):
Para configurar el datasource del que hace uso nuestra clase vamos a editar el fichero %TOMCAT_HOME%/conf/context.xml para añadir la declaración del datasource de esta forma:
-->
Ya sólo nos queda reiniciar el servidor y comprobar que ahora para validarse en CAS tienes que estar registrado en la base de datos.
5. Conclusiones
Como era de esperar no es díficil modificar el validador que CAS trae por defecto por el que se ajuste a nuestras necesidades. En este tutorial hemos visto como logarse contra una base de datos pero esto es extensible para cualquier fuentes de datos como LDAP o Active Directory.Saludos.











