Configuration des filtres d'authentification
Les filtres d'authentification du portail sont un ensemble de points de plug-in. Vous pouvez les utiliser afin d'intercepter ou d'étendre la connexion au portail, la déconnexion, le délai d'expiration de session et le traitement des requêtes à l'aide de code personnalisé, par exemple en vue de rediriger les utilisateurs vers une URL spécifique.
- Le concept de chaîne de filtres d'authentification
- Chaînes de filtres d'authentification disponibles
- Configuration des chaînes de filtre
- Exemple de filtre d'authentification personnalisé
Le concept de chaîne de filtres d'authentification
Trigger of filter chain, | |
for example explicit | CustomFilter1 |
login or logout ---> next(..., chain){ | |
| // do something #1a | CustomFilter2 |
| chain.next(...) ---> next(..., chain){ |
| | // do something #2a | DefaultFilter
| | chain.next(...) ---> next(..., chain){
| | | // Execute the
| | | default logic
| | // do something #2b <--- }
| // do something #1b <--- } |
Redirect, exception, <--- } |
or continue | Un filtre par défaut réalise la logique par défaut d'un cas d'utilisation spécifique, par exemple la connexion. Vous pouvez regrouper en chaîne un ensemble de filtres personnalisés à exécuter avant le filtre par défaut. Lorsque la chaîne de filtres est démarrée, elle appelle le premier élément de la chaîne (dans l'exemple, il s'agit de CustomFilter1) et transmet un objet de chaîne à l'appel sous forme d'argument. L'implémentation du filtre peut alors effectuer certaines opérations qu'elle appelle pour réaliser la méthode appropriée sur l'objet de chaîne afin de déclencher l'élément suivant dans la chaîne (CustomFilter2). Ce filtre peut à nouveau implémenter une logique particulière qui est exécutée avant l'appel de l'élément suivant. Le dernier élément de la chaîne est l'élément DefaultFilter prédéfini, lequel garantit l'exécution de la logique par défaut du cas d'utilisation concerné.Après l'exécution d'un filtre ou le renvoi d'une exception, chaque filtre revient à celui qui l'a appelé. Il est donc possible d'implémenter un traitement d'exception personnalisé ou d'effectuer des opérations supplémentaires après avoir appelé son successeur. Vous pouvez désormais créer une chaîne de filtres personnalisés. Chaque filtre personnalisé peut effectuer des opérations avant et après l'élément ou les éléments suivants dans la chaîne. Vous pouvez spécifier l'ordre et les noms de classe qualifiés des filtres personnalisés à l'aide de propriétés de configuration du portail. Pour plus de détails, voir la rubrique relative au service d'authentification WP du portail. Le portail fournit uniquement les implémentations de DefaultFilter et s'assure qu'elles sont toujours le dernier élément d'une chaîne. Si aucun filtre de connexion personnalisé n'a été défini, les filtres par défaut constituent alors l'unique élément.
Chaînes de filtres d'authentification disponibles
- Connexion explicite : connexion à l'aide d'un nom d'utilisateur et d'un mot de passe, comme représenté par l'interface
com.ibm.portal.auth.ExplicitLoginFilter. Par exemple, connexion en utilisant le portlet ou l'URL de connexion. - Connexion implicite : par exemple, lorsqu'un utilisateur est déjà authentifié par WAS, mais pas encore auprès de Portal. Cet événement est représenté par l'interface
com.ibm.portal.auth.ImplicitLoginFilter. - Déconnexion explicite : cela signifie que l'utilisateur déclenche directement une action de déconnexion, par exemple en cliquant sur Déconnexion dans l'interface utilisateur,
interface com.ibm.portal.auth.ExplicitLogoutFilter. - Déconnexion implicite : par exemple, à expiration du délai de session, ou lorsqu'un utilisateur authentifié accède à une page publique, ou à un portail virtuel sans être membre du domaine utilisateurs associé. Cet événement est représenté par l'interface
com.ibm.portal.auth.ImplicitLogoutFilter. - Expiration du délai d'attente de session : appelée immédiatement au terme du délai d'inactivité de la session de l'utilisateur. Cet événement est représenté par l'interface
com.ibm.portal.auth.SessionTimeoutFilter. - Validation de session : appelée pour chaque requête avant que ne soient déclenchées des actions et un rendu de la page. Cet événement est représenté par l'interface
com.ibm.portal.auth.SessionValidationFilter.
Configuration des chaînes de filtre
login.explicit.filterchain = colon or semicolon-separated list of fully qualified class names
login.implicit.filterchain = colon or semicolon-separated list of fully qualified class names
logout.explicit.filterchain = colon or semicolon-separated list of fully qualified class names
logout.implicit.filterchain = colon or semicolon-separated list of fully qualified class names
sessiontimeout.filterchain = colon or semicolon-separated list of fully qualified class names
sessionvalidation.filterchain = colon or semicolon-separated list of fully qualified class names
filterchain.properties.fully qualified class name of the filter implementation.property nameCela a pour effet de rendre disponible la valeur de la propriété dans l'objet de configuration de filtre de la classe spécifiée en utilisant la clé property name.Pour plus de détails sur la définition des propriétés de configuration du portail, reportez-vous à la rubrique consacrée à la définition des propriétés de configuration du service.
Exemple de filtre d'authentification personnalisé
- Implémentez l'interface
com.ibm.portal.auth.ExplicitLoginFilteret rendez votre classe disponible dans le chemin d'accès aux classes du portail en ajoutant le fichier JAR au répertoire de chemin d'accès aux classes étendu de l'application HCL :PortalServer_root/shared/app. Pour un exemple d'implémentation des méthodes de l'interface, reportez-vous à l'exemple de code suivant :package com.ibm.portal.example; public class UserRedirectLoginFilter implements ExplicitLoginFilter { // hash map to store the mappings from user id to redirect URL private java.util.Map userToRedirectURLs = new java.util.HashMap(); public void init(SecurityFilterConfig filterConfig) throws SecurityFilterInitException { // iterate the list of init parameters and store the mappings of user to redirect urls for (java.util.Iterator it = filterConfig.getInitParameterNames(); it.hasNext(); ) { String currentParameter = (String)it.next(); userToRedirectURLs.put(currentParameter, filterConfig.getInitParameter(currentParameter)); } } public void login(HttpServletRequest req, HttpServletResponse resp, String userID, char[] password, FilterChainContext portalLoginContext, Subject subject, String realm, ExplicitLoginFilterChain chain) throws LoginException, WSSecurityException, PasswordInvalidException, UserIDInvalidException, AuthenticationFailedException, AuthenticationException, SystemLoginException, com.ibm.portal.auth.exceptions.LoginException { // call the next element in the filter chain to trigger the default login chain.login(req, resp, userID, password, portalLoginContext, subject, realm); // if no exception occured, the login was successful if (userToRedirectURLs.containsKey(userID)) { // set the redirect url for the user if we have an entry portalLoginContext.setRedirectURL((String)userToRedirectURLs.get(userID)); } } public void destroy() { // nothing to do here } } - Spécifiez le nom de classe du filtre personnalisé dans les propriétés du service d'authentification WP :
login.explicit.filterchain=com.ibm.portal.example.UserRedirectLoginFilter - Pour définir les URL de redirection d'ID utilisateur spécifiques, spécifiez en conséquence le groupe de propriétés personnalisées de cette classe. Exemple :
filterchain.properties.com.ibm.portal.example.UserRedirectLoginFilter.alice=/wps/myportal/pageA filterchain.properties.com.ibm.portal.example.UserRedirectLoginFilter.bob=/wps/myportal/pageB - Redémarrez le portail.