Apache Wicket - wicket-auth-session - предотвращение множественных входов - PullRequest
4 голосов
/ 24 августа 2010

Я использую wicket-auth-role и, в частности, AuthenticatedWebApplication, для защиты страниц в моем приложении wicket. Я хотел бы запретить пользователям входить из нескольких мест с одним и тем же логином. В настоящее время пользователи могут входить в систему с одним и тем же пользователем с двух разных компьютеров.

Я уверен, что это так же просто, как сделать недействительным сеанс первого пользователя, но я не знаю, как добиться этого из моего AuthenticatedWebApplication, когда появляется второй пользователь. Любое руководство приветствуется.

Спасибо Matt

Ответы [ 2 ]

1 голос
/ 15 ноября 2010

Благодаря реализации HttpSessionListener ( пример ) вы можете отслеживать, когда сеансы создаются и уничтожаются.

Я рекомендую иметь поле user_id в сеансе и добавлять сеансы на карту при создании.

Вы сравниваете новые сеансы с сеансами на этой карте и убедитесь, что идентификаторы пользователей не совпадают.

Если они совпадают, пользователь уже вошел в систему, поэтому лишите законной силы новый сеанс, запретив вход в систему.

0 голосов
/ 02 августа 2011

Если бы я собирался сделать это, я бы попробовал что-то вроде

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();
            }
        }
    }
}
...