CAS: Validador personalizado

4
9802

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=casdemo

Ahora editamos el fichero pom.xml del proyecto para
añadir las
siguientes dependencias:


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



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:

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.

4 COMENTARIOS

  1. Buenas, Hice los pasos que comentas metiendo la clase creada en el package com.autentia.casdemo el Tomcar no encuentra esta clase que creé me salta un error de tipo :
    [com.autentia.casdemo.DemoCasValidador] for bean with name \\\’com.autentia.casdemo.DemoCasValidador#31704297\\\’ defined in ServletContext resource [/WEB-INF/deployerConfigContext.xml]; nested exception is java.lang.ClassNotFoundException: com.autentia.casdemo.DemoCasValidador, podrías decirme cual puede ser el problema???

  2. Buenas, Has hecho bien este paso??? \\\»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.\\\»

    Saludos

  3. Hola, me ha surgido una duda respecto a la configuración del CAS, existe alguna manera de poder redireccionar un servidor CAS a otro servidor CAS.
    Gracias

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad