N'autoriser qu'une seule session par utilisateur
Nous avons une web-application développée à l'aide de struts2, spring & hibernate.
L'application a besoin d'une fonctionnalité que les utilisateurs peuvent se connecter à partir de seulement un navigateur.
Dire si l'utilisateur x, est connecté sur le pc-1 navigateur ff, alors il ne peut pas être connecté à partir de n'importe quel autre endroit.
Je l'ai essayé par la mise en place de session de la carte et de stocker les sessions dans la carte du monde, mais cela échoue lorsque l'utilisateur se déconnecte et tente de se connecter à nouveau.
Même il ne parvient pas critique si l'utilisateur ne se déconnecte de la session et de délais d'attente, mais la carte n'est pas effacée.
Meilleure idée pour mettre en œuvre cette fonctionnalité.
Nous ne voulons pas gêner l'utilisateur de se connecter, mais ne souhaitez pas que les utilisateurs d'exploiter l'application, en lui permettant de partager les creditionals et permettre à plusieurs utilisateurs avec le même login arriver.
OriginalL'auteur Amol Ghotankar | 2012-05-28
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes déjà à l'aide de Printemps, je vous recommande d'intégrer votre application avec Spring Security.
Printemps de sécurité vous permet de définir le nombre maximal de sessions autorisées par utilisateur en même temps.
Si elle est définie lorsque l'utilisateur valide session essaie de se connecter à nouveau, il informe l'utilisateur que le maximum de l'accès simultané est mis à 1.
Lire plus au.
Si le printemps de sécurité n'est pas une option pour vous, alors:
Utiliser un
SessionInterceptor
qui permettra de vérifier la validité de session, si la session est valide, il va vérifier si l'utilisateur est déjà connecté à l'application (pour cela, vous aurez à maintenir la session quelque part, par exemple la base de données pour chaque connexion réussie), si la connexion valide est trouvé, rediriger l'utilisateur vers la page de login avec un message personnalisé, ou de déconnexion déjà de session valide, et ensuite rediriger lui de vous connecter à nouveau. Si vous fermez la session précédente session, toute action successive dans cette session de navigateur à traiter avec de session non valide.Si le cas où vous sont également à l'aide de
Servlet
dans votre application puis de l'Intercepteur ne fonctionnent pas pour vous, dans ce cas, vous devez utiliser unFilter
et suivez les mêmes étapes que détaillée ci-dessus pour l'Intercepteur.ce qui si l'utilisateur ouvre de multiples navigateurs et à la prochaine demande de visites sur un autre serveur en cluster? Je ne pense pas qu'il existe une solution miracle pour résoudre ce
si vous utilisez une base de données de capture d'ouverture de session valides il fonctionnera indépendamment de groupe qui vous a frappé.
accepte de travailler dans une certaine mesure, où chaque utilisateur véritablement se déconnecte du système. Autrement, nous devons commencer à ajouter des emplois pour nettoyer la rassis sessions de db et ainsi de suite
Oui il y aura un certain coût pour la maintenir, il ne peut pas l'aider
OriginalL'auteur mprabhat
À la connexion de donner à l'utilisateur un IDENTIFIANT généré/cookie (sessionid suffit) stockées avec les données de l'utilisateur. Si un utilisateur fait une requête au serveur avec un vieux ID/cookie, dire qu'il a connecté ailleurs.
L'inverse, l'interdiction de la nouvelle tentative de connexion, a ses inconvénients - comme vous l'avez connu.
OriginalL'auteur Joop Eggen
La meilleure solution est de vous déconnecter de l'utilisateur à partir d'une autre session lorsqu'il se connecte à la nouvelle session. C'est souvent que l'utilisateur ne serait pas de fermeture de session lors de la fermeture du navigateur et la restriction de lui à partir de l'exploitation forestière dans une autre fenêtre serait le piège.
Automatiquement la fermeture de l'un des précédentes sessions de l'utilisateur est bon, parce que dans l'utilisation normale, il n'est pas un problème, mais lors du partage de connexion et le mot de passe, n'y a pas deux personnes peuvent travailler simultanément avec votre application.
OriginalL'auteur Danubian Sailor
Créer une carte.
Au moment de l'enregistrement de vérifier que l'id d'utilisateur est présent dans cette carte ou non.
Si sa n'existe pas, alors mettez id utilisateur dans la carte, au moment de la déconnexion supprimer que les id d'utilisateur.
Tu veux dire que, si l'utilisateur va fermer le navigateur, sans fermer la session? Essayez d'appeler "j_spring_security_logout" sur navigateur unload() fonction.
OriginalL'auteur Sachin J
Pour être honnête, je reviendra sur les raisons pour lesquelles vous devez restreindre un utilisateur à une connexion unique. Tout en les empêchant de se connecter à partir de deux différents navigateurs est assez facile - toutes les suggestions proposées ne fonctionne - avec le Printemps option de Sécurité étant le plus facile à mettre en œuvre si vous peuvent - ils tous briser lorsque l'utilisateur ouvre un deuxième onglet dans le même navigateur. Qui est considéré comme faisant partie de la même session.
OriginalL'auteur user497087
Maintenir la pile de l'utilisateur dans le contexte de servlet,comme elle le sera pour un conteneur web.effectuer un contrôle avant que l'utilisateur se connecté, si le nom d'utilisateur trouvé dans le servlet contexte de redirection lui à la page de connexion.
OriginalL'auteur user3244376
Tout ce que vous devez faire est d'ajouter un champ dans la base de données de l'utilisateur table en disant: alreadyLogin.
Si les connexions de l'utilisateur, à faire il Y. Si l'utilisateur se déconnecte, le rendre N. Maintenant, à chaque fois lorsque l'utilisateur tente de se connecter à partir du nouvel emplacement, vérifiez cette valeur et éviter de connexion si la Valeur est Y.
OriginalL'auteur Aakash Patel