Apache Wicket - wicket-auth-sessions - 防止多次登录

时间:2010-08-24 18:16:43

标签: java authentication java-ee wicket

我正在使用wicket-auth-roles,特别是'AuthenticatedWebApplication'来保护我的wicket应用程序中的页面。我想禁止用户使用相同的登录名从多个位置登录。目前,用户似乎可以从两台不同的计算机登录同一用户。

我确信它与第一个用户的会话无效一样容易,但是当第二个用户出现时,我不知道如何从我的AuthenticatedWebApplication中获取它。任何指导赞赏。

由于 马特

2 个答案:

答案 0 :(得分:1)

通过实施HttpSessionListener(example),您可以监控会话的创建和销毁时间。

我建议在会话中使用user_id字段,并在创建时将会话添加到地图中。

您将新会话与此地图中的会话进行比较,并确保用户ID不同。

如果它们相同,则用户已登录,因此使新会话无效,禁止登录。

答案 1 :(得分:0)

如果我打算这样做,我会尝试像

这样的东西
class MyApplication ...
{
    @Override
    protected void init()
    {
        getRequestCycleListeners().add(new SessionGuard());
    }
}

class SessionGuard extends AbstractRequestCycleListener
{
    @Override
    public void onBeginRequest(final RequestCycle cycle)
    {
        final MySession session = MySession.class.cast(Session.get());

        if(session.isSignedIn())
        {
            final String validSessionId = session.getUser().getLastAuthenticatedSessionId();

            if(!session.getId().equals(validSessionId))
            {
                session.invalidate();
            }
        }
    }
}