2010-03-17 7 views
1

J'utilise spring + tapisserie pour authentifier webuser. Je me demande est là une technique que je peux forcer tous les utilisateurs qui se connectent actuellement dconnecter Disons que je suis sur le scénario où le site est « en mode maintenance »forcer la fermeture de toutes les sessions

p/s: sera-il capable de forcer tous les utilisateurs «processus en cours d'exécution pour terminer et ne forcer déconnecter

Répondre

1

Le problème consiste à essayer de les laisser finir la requête et de les déconnecter seulement. Je suppose que si elles frappent enregistrer sur un formulaire, vous voulez que les données soient enregistrées, mais ils doivent ensuite être redirigés vers la page de maintenance. Pour les requêtes GET, vous pouvez simplement déconnecter l'utilisateur si l'indicateur de maintenance est défini. Les POSTES sont un peu plus difficiles car vous souhaitez terminer la requête, puis les déconnecter et les rediriger vers la page de maintenance. J'essaierais un filtre de requête. Gérez la demande comme d'habitude, puis invalidez la session et utilisez response.sendRedirect si l'indicateur de maintenance est défini.

Une autre option consisterait à utiliser un temporisateur JavaScript dans la mise en page - appuyez régulièrement sur une page pour voir si elles doivent être déconnectées. Cela ne leur permettrait probablement pas de terminer leur demande actuelle.

+0

@ya, javascript importe serait bon – cometta

4

Deux choses viennent à l'esprit:

  • utilisation HttpSessionListener de garder une trace de toutes les sessions et les invalider le moment venu. Pour l'utiliser, vous aurez besoin d'un Set de Session objets dans votre ServletContext (ou moins préférablement - comme un champ statique). Mettez à jour ce Set chaque fois qu'une session est créée ou détruite, et répétez l'ensemble lorsque l'invalidation est nécessaire.

  • utiliser un Filter (mis en correspondance /*) où, si certaines conditions (maintenance == true) sont remplies, invalident la session en cours. Ainsi, tous les utilisateurs seront déconnectés lors de leur prochaine action. Cela fonctionnerait dans les cas où "mode de maintenance" ne signifie pas "arrêter le serveur entier", mais signifie plutôt "aucune opération ne doit être effectuée par les utilisateurs, je fais quelque chose d'important en arrière-plan"

+0

@Bozho j'aime votre idée – cometta

+0

2ème n'est pas une option, vous devez attendre l'action suivante ou la pour le délai. Et le temps d'attente signifie que la session a déjà détruit quoi forcer alors. Et la 1ère option, je ne vois pas comment cela va être utile. Il a juste 2 méthodes qui seront invoquées sur des événements particuliers. Comment ça va forcer la déconnexion, je ne sais pas. Il pourrait être utile d'effectuer une opération sur une session détruite, mais ce n'est pas le problème. –

+0

@Adeel Ansari la deuxième option fonctionnerait dans le cas où le mode d'entretien ne signifie pas "arrêter le serveur", mais plutôt "arrêter toutes les opérations de l'utilisateur". J'ai eu un scénario similaire. La première option - j'ai dit "garder trace" - cela signifierait stocker une référence à chaque session à la création (soit dans une variable statique ou dans le servletContext de préférence) et y accéder chaque fois que nécessaire. – Bozho

Questions connexes