3

我的问候。

我有这样一个问题。spring security 中是否有任何方法可以检查来自同一 IP 地址的登录数量?我的意思是,如果有人从这个当前 IP 登录,我想通知他他无法使用不同的凭据(例如从不同的浏览器)登录并拒绝登录尝试。

我试图用谷歌搜索它并找到以下内容,但这不是我要找的东西:

使用 Spring Security 的 IP 过滤器

在 Spring 3.1 中通过 IP 地址进行身份验证:最聪明的方法是什么?

4

3 回答 3

3

一种可能的解决方案是实现一对自定义AuthenticationSuccessHandlerLogoutSuccessHandler并且(都可以访问 http 请求)可以维护一个并发映射,该映射保存由其 ip 地址键入的登录用户数量。然后添加一个自定义过滤器,该过滤器拦截登录请求,检查该映射,并在用户 IP 地址超出限制时重定向用户。

于 2013-02-27T13:16:19.847 回答
1

我认为没有办法开箱即用。您实际上可以做的是限制来自一个浏览器实例的最大连接数(请参阅并发会话章节)。

如果这对您来说还不够,那么您可以手动完成(感谢 Spring Security 中精心设计的扩展点)。按照此处的说明定义您的自定义过滤器。为会话注册表声明一个别名并加载所有主体。在正常情况下,每个主体将由 Authentication 对象表示。Authentication.getDetails() 可能包含一个 IP 地址。查找重复项并将用户重定向到某个错误页面。希望这可以帮助。

编辑。它不起作用,因为会话注册表中的主体实际上是 org.springframework.security.core.userdetails.User 的一个实例,而不是身份验证。

于 2013-02-26T17:42:44.717 回答
1

SessionAuthenticationStrategy是监视和控制登录尝试的点。已经有ConcurrentSessionControlStrategy用于限制由相同用户名登录的会话。您可以扩展它或从中学习。并重定向或转发到SimpleUrlAuthenticationFailureHandler中的错误页面。

/**
 * 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
于 2013-03-12T16:51:39.940 回答