Groupe 1B (SSO et gestion des autorisations)

Date de création : 4 décembre 2003
Dernière modification : 9 décembre 2003
Diffusion : internet

Présentation de CASFilter

Ce document présente l'utilisation de CASFilter pour la CAS-ification d'une appli serveur java.

Se reporter au document client CAS java pour d'autres informations sur la CAS-ification d'une temme appli.

Intérêt d'un filtre J2EE

La technique de filtre J2EE permet de n'autoriser l'accès à certaines URLs d'une serlvet java que si un filtre (en fait, une classe java) l'autorise.

Les filtres sont appliqués par rapport à des patterns d'urls (/chemin/*, /chemin/*.doc, ...)

Si une url est filtrée, le serveur d'application invoque un appel au filtre à la place de cette url. Il est aussi possible de combiner plusieurs filtres pour un meme pattern d'url.

L'intérêt est de pouvoir paramétrer ce filtre dans le fichier web.xml de l'application, donc sans intervenir dans le code source.
Il serait ainsi possible de changer le mode d'authentification d'une application sans toucher au code de celle-ci.

Filtre CASFilter

La classe fournie par le package CAS est edu. yale .its.tp. cas .client.filter.CASFilter.

Le principe du filtre CAS est, dans le cas où l'utilisateur n'est pas préalablement authentifié CAS, de rediriger son navigateur web vers la page de login CAS et de valider ensuite le ticket obtenu avant de lui donner accès à l'url protégée. Une variable de session contenant le login validé par CAS est positionnée et est accessible par les programmes java.

Ce filtre positionne une variable de requete, accessible dans l'application protégée de cette manière :

String casUser = (String) session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_USER);

En fait, le filtre CASFilter est également capable de valider un proxy ticket

Paramétrage

la configuration d'un filtre est propre à un contexte ; pour celà, on utilise le fichier web.xml.

Les différents paramètres du filtre sont :

edu.yale.its.tp.cas.client.filter.loginUrl l'url de login sur le serveur cas
edu.yale.its.tp.cas.client.filter.validateUrl l'url pour la validation du ticket
edu.yale.its.tp.cas.client.filter.authorizedProxy eventuellement le ou les proxy(ies) autorisé(s)
edu.yale.its.tp.cas.client.filter.serviceUrl optionnel : le service a protéger, on peut n'indiquer que le nom du serveur
edu.yale.its.tp.cas.client.filter.renew agit sur le parametre renew pour la demande d'un ticket
edu.yale.its.tp.cas.client.filter.serverName le nom du serveur sur lequel tourne le filtre (et les urls a protéger)

ATTENTION :

Pour respecter la dtd du web.xml, il faut que l'élément filter et l'élément filter-mapping soient précisés dans cet ordre, et situés entre l'élément context-param et le premier élément servlet.

Exemple d'utilisation

Fichier web.xml

Voici un extrait, concernant la déclaration d'un filtre CASFilter.
Respecter l'ordre dans le fichier web.xml, voir la remarque précédente.

  <filter> 
<filter-name>Filtre CAS</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://auth.univ.fr/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://auth.univ.fr/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>ent.univ.fr</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filtre CAS</filter-name>
<url-pattern>/private/*</url-pattern>
</filter-mapping>

utilisation

Voici un jsp d'exemple, situé dans l'uri /private :

<%@ page import="edu.yale.its.tp.cas.client.*"%>
<% String casUser = (String) session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_USER); %> <html> <head> </head> <body> <h1>Bonjour <%out.println(casUser);%></h1> </body> </html>