2010-08-24 2 views
4

Я использую роли калитки-auth и, в частности, «AuthenticatedWebApplication» для защиты страниц в моем приложении с калитки. Я хотел бы запретить пользователям входить в систему из нескольких мест с тем же именем. В настоящее время пользователи, похоже, могут войти в один пользователь с двух разных машин.Apache Wicket - wicket-auth-sessions - Предотвращение множественных подписей

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

Благодаря Matt

ответ

1

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

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

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

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

+0

Thank вы для ответа, это полезное обходное решение, но мне больше интересно узнать, была ли эта функциональность реализована и абстрагирована калиткой, а не сама ее реализация. – Matt

+0

Похоже на упущение. :) – Matt

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(); 
      } 
     } 
    } 
} 
Смежные вопросы