2010-12-08 22 views
0

CONTEXTEGlassfish/J2EE: un moyen léger de configurer l'authentification des utilisateurs pour éviter les connexions multiples?

Nous utilisons le serveur Glassfish et configuré avec Single Sign-On (SSO) activé pour que l'utilisateur ne dispose que pour authentifier une fois et peut accéder à plusieurs applications Web. Chaque application web spécifie une connexion basée sur un formulaire (* j_security_check *) et pour les besoins du développement, nous utilisons le File Realm. Cela fonctionne bien. Glassfish génère à la fois une Session (portée vers le chemin de l'application web où l'utilisateur est authentifié), et aussi Cookie (JSESSIONIDSSO) pour identifier maintenir l'état authentifié pour le serveur (et les autres applications web).

Vous pouvez forcer l'utilisateur à se ré-authentifier en appelant Session.invalidate() sur la session de l'application Web des utilisateurs, ce qui invalide également le cookie SSO. Tout cela fonctionne bien.

PROBLÈME

Nous cherchons un moyen d'empêcher l'utilisateur d'avoir plusieurs connexions simultanées. Il semble naturel d'essayer de capturer la session de l'utilisateur une fois créée (ou le cookie SSO) et de la stocker dans une carte codée par le nom de l'utilisateur, qui peut être vérifiée chaque fois que quelqu'un accède à la page de connexion.

Idéalement, nous aimerions gérer un événement post-authentification, dans un contexte où nous pouvons accéder à la fois au nom d'utilisateur (ou à l'objet principal) et à la session créée. (Je regardais le HttpSessionListener, mais cela ne semble pas fournir d'accès à l'utilisateur auquel il est lié). J'essaye de faire ceci sans kluge (parce que je pense penser à plusieurs), ou en introduisant un autre cadre entièrement nouveau dans l'application (par exemple Spring Security). (Et j'espère que cela ne nécessite pas l'implémentation d'un module JAAS complet ...)

Répondre

0

J'ai fini par créer un filtre de servlet personnalisé pour vérifier que cet utilisateur n'avait pas encore de session active. Cela semble être un service offert par le niveau d'authentification du conteneur J2EE.