Программная недействительность HttpSession

Можно ли завершить HttpSession зарегистрированного пользователя?

Мы можем сделать следующее из сеанса пользователя:

HttpSession s = request.getSession(false);
s.invalidate(); // make sure s != null

Но как пользователь-администратор может «выгнать» данного пользователя?

Я надеялся найти какой-нибудь API под ServletContext, который вернул бы список активных сеансов, но, похоже, это не так.

Я использую Spring Security 3 и Tomcat 7.


person kmansoor    schedule 04.09.2012    source источник


Ответы (2)


Spring Security имеет SessionRegistry для обработки подобных сценариев. Вы можете объявить его, используя атрибут session-registry-ref в теге concurrency-control. Вот небольшая документация.

person sinuhepop    schedule 04.09.2012

В основном есть два способа (оставляя без внимания Spring Security, поскольку я не использую Spring):

  1. Соберите все эти сеансы в некотором приложении Map<User, HttpSession>. Тогда просто сделай

    sessions.get(user).invalidate();
    

    HttpSessionListener и/или HttpSessionBindingListener может помочь при очистке всего приложения Map в случай тайм-аутов/истечения сеанса.

  2. Добавьте логический столбец в БД, который проверяется при каждом запросе некоторым фильтром.

    if (shouldLogout(user)) {
        session.invalidate();
    }
    
person BalusC    schedule 04.09.2012