Сеанс пользователя Java Remote kill - PullRequest
3 голосов
/ 18 августа 2011

Как я могу убить идентификатор сессии пользователя из панели веб-администрирования? Я имею в виду, что у меня есть несколько пользователей, заходящих на сайт с jboss 4.2 и стояками 1.3, и я хочу закрыть сеанс некоторых из этих пользователей удаленно с одного и того же сайта. Какова лучшая стратегия?

Одним из возможных решений является привязка JSESSIONID к пользователю в базе данных и установка JSESSIONID. Затем для каждой транзакции спрашивать, удаляю ли я сеанс пользователя.

Я пытаюсь обработать его с помощью context.xml на стороне jboss с сеансом FileStore, но если я удаляю файл сеанса (например, 2B6609A6CA38E35EEDF21BF3F3253BC8.session), сеанс все еще активен.

<Manager className="org.apache.catalina.session.PersistentManager" saveOnRestart="false">
    <Store  className="org.apache.catalina.session.FileStore" directory="\tmp\">  
    </Store>
 </Manager>

Есть предложения? спасибо

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Один из способов - просто собрать эти сеансы самостоятельно с помощью HttpSessionListener:

public class SessionManager implements HttpSessionListener {

    private static Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();        

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        sessions.put(event.getSession().getId(), event.getSession());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        sessions.remove(event.getSession().getId());
    }

    public static boolean invalidate(String sessionId) {
        HttpSession session = sessions.get(sessionId);

        if (session != null) {
            session.invalidate();
            return true;
        } else {
            return false;
        }
    }

}

Это позволяет вам делать что-то подобное в коде вашей панели веб-администратора:

SessionManager.invalidate(someSessionId);

Возможно, вы уже используете HttpSessionListener для синхронизации сеансов с базой данных. Тогда это было бы совершенно излишним.

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

Для этого должен быть интерфейс JMX.

...