3 votes

Sécurité Spring - plusieurs connexions à partir de la même adresse IP

Mes salutations.

J'ai une question de ce type. Existe-t-il un moyen, dans spring security, de vérifier le nombre de connexions à partir de la même adresse IP ? Je veux dire que si quelqu'un est connecté à partir de cette adresse IP, j'aimerais l'informer qu'il ne peut pas se connecter avec des informations d'identification différentes (par exemple à partir d'un autre navigateur) et refuser la tentative de connexion.

J'ai essayé de chercher sur Google et j'ai trouvé ce qui suit, mais ce n'est pas ce que je cherche :

Filtre IP à l'aide de Spring Security

Authentification par adresse IP dans Spring 3.1 : quelle est la meilleure façon de procéder ?

3voto

zagyi Points 6883

Une solution possible consiste à mettre en œuvre une paire d'outils personnalisés de type AuthenticationSuccessHandler y LogoutSuccessHandler qui (ayant tous deux accès à la requête http) peuvent gérer une carte concurrente contenant le nombre d'utilisateurs connectés en fonction de leur adresse IP. Ajoutez ensuite un filtre personnalisé qui intercepte les demandes de connexion, vérifie cette carte et redirige l'utilisateur si le nombre d'utilisateurs de son adresse IP dépasse la limite.

1voto

Maksym Demidas Points 4578

Je pense qu'il n'y a pas de moyen de le faire à partir de la boîte. Ce que vous pouvez faire en fait, c'est limiter le nombre maximum de connexions à partir d'une instance de navigateur (voir session simultanée chapiter ).

Si cela ne vous suffit pas, vous pouvez le faire manuellement (grâce à des points d'extension soigneusement conçus dans Spring Security). Définissez votre filtre personnalisé comme suit aquí . Déclarer un alias pour le registre des sessions et charger tous les directeurs d'école . Dans un cas normal, chaque principal est représenté par un objet d'authentification. Authentication.getDetails() peut contenir une adresse IP. Trouver les doublons et rediriger l'utilisateur vers une page d'erreur. J'espère que cela vous aidera.

EDIT. Cela ne fonctionnerait pas car un principal provenant d'un registre de session est en fait une instance de org.springframework.security.core.userdetails.User et non Authentication.

1voto

Henry Leu Points 631

Stratégie d'authentification de session est le point de surveillance et de contrôle des tentatives de connexion. Il existe déjà un Stratégie de contrôle des sessions simultanées pour limiter les sessions connectées par le même nom d'utilisateur. Vous pouvez l'étendre ou vous en inspirer. et rediriger ou renvoyer vers une page d'erreur en SimpleUrlAuthenticationFailureHandler (Gestionnaire d'échec d'authentification simple) .

/**
 * Strategy which handles concurrent session-control, in addition to the functionality provided by the base class.
 *
 * When invoked following an authentication, it will check whether the user in question should be allowed to proceed,
 * by comparing the number of sessions they already have active with the configured <tt>maximumSessions</tt> value.
 * The {@link SessionRegistry} is used as the source of data on authenticated users and session data.
 * <p>
 * If a user has reached the maximum number of permitted sessions, the behaviour depends on the
 * <tt>exceptionIfMaxExceeded</tt> property. The default behaviour is to expired the least recently used session, which
 * will be invalidated by the {@link ConcurrentSessionFilter} if accessed again. If <tt>exceptionIfMaxExceeded</tt> is
 * set to <tt>true</tt>, however, the user will be prevented from starting a new authenticated session.
 * <p>
 * This strategy can be injected into both the {@link SessionManagementFilter} and instances of
 * {@link AbstractAuthenticationProcessingFilter} (typically {@link UsernamePasswordAuthenticationFilter}).
 *
 * @author Luke Taylor
 * @since 3.0
 */
public class ConcurrentSessionControlStrategy extends SessionFixationProtectionStrategy

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X