2010-09-06 2 views
0

J'espère que ma question sur le titre a un sens, sinon, disons: machine A, via le navigateur web, je me connecte en tant que admin, I aller à la machine B, et connectez-vous en tant que admin, le navigateur Web dans la machine A devrait forcer une déconnexion sur l'utilisateur admin. J'ai réfléchi un peu, et je pense que ce sera moche si j'essaie de le mettre en œuvre manuellement. J'ai le sentiment que cela peut être fait dans Glassfish. J'utilise Java EE 6 + Glassfish v3.0.1. L'authentification et l'autorisation sont mises en œuvre par l'intermédiaire jdbcRealm mis en place dans GlassfishJava EE + GlassFish: Forcer l'utilisateur à se déconnecter s'il/elle se connecte ailleurs

+1

Est-ce que vous contrôlez les deux machines? Si non, les machines sont-elles toutes deux dans le même domaine, et B émet-il des cookies pour le domaine partagé plutôt que pour lui-même? Si la réponse aux deux questions est non, cela ne peut pas être fait. –

+1

@Tom: Je pense qu'il voulait dire "machine client", pas "serveur" ici. @Harry: question similaire: http://stackoverflow.com/questions/2372311/jsf-how-to-invalidate-an-user-session-when-he-logs-twice-with-the-same-credentia – BalusC

+0

@BalusC : Aaah, oui, mon malentendu, je vois. –

Répondre

5
  • créer et carte (en utilisant <listener>..</listener> dans web.xml) un HttpSessionListener
  • sur sessionCreated(..) stocker une référence à la session du ServletContext, dans un Map<String, Session>
  • lorsque l'utilisateur se connecte, obtenez le Map à partir du ServletContext et vérifiez si une session a le même user/userId qu'un attribut de session.
  • s'il y a, session.invalidate() il.
  • si vous voulez l'utiliser dans un cluster, vous pouvez utiliser une base de données pour stocker les informations afin qu'il soit accessible de partout, ou utilisez un cache distribué (JBoss Cache, Ehcache)
+1

Peut-être une carte plutôt qu'un ensemble, pour permettre des recherches faciles par ID utilisateur plutôt que de devoir itérer. –

+0

bonne idée. mise à jour – Bozho

+0

Malheureusement, cela ne fonctionnera pas dans un cluster. –