выход из системы на основе таймерной задачи доставит мне проблемы - PullRequest
2 голосов
/ 02 октября 2011

На этом сайте мне нужна система, которая выходит из системы через 10 минут.Для входа в систему я использую простую процедуру вставки пользовательского (в моем случае Lid) экземпляра, и выход из системы делает сеанс недействительным, кроме того, когда пользователь входит в таймерную задачу в пределах таймера, и через 10 минут делает недействительнымисеанс.

Вот код:

MyTask task = null;

private void setCurrent(String key, Object o) {
    getRequest().getSession().setAttribute(key, o);
}

private <T> T getCurrent(String key) {
    T value = (T) getRequest().getSession().getAttribute(key);
    return value;
}

public void logIn(Lid lid) {
    setCurrent("lid", lid); 
    Timer timer = new Timer();
    task = new MyTask(getRequest().getSession());
    System.out.println(task.toString());
    timer.schedule(task,10*60*1000);
}

public void logOut() {
    task.cancel();
    getRequest().getSession().invalidate();
}

Это код MyTask:

public class MyTask extends TimerTask {

    HttpSession session = null;

    public MyTask(HttpSession session) {
        this.session=session;
    }

    @Override
    public void run() {
        session.invalidate();
    }

}

Проблема в том, что, когда я добровольно выхожу, он выдаетисключение, потому что он говорит, что переменная task равна null, и поэтому становится невозможным вызвать cancel() для переменной task.

Но я не получаю ее после регистрациив переменной создается экземпляр, а не null.

Есть ли у вас какие-либо советы по этому поводу?Спасибо

1 Ответ

1 голос
/ 03 октября 2011

Почему бы просто не позволить веб-контейнеру обработать время ожидания сеанса для вас?Если вы поместите приведенный ниже код в ваш web.xml, все неактивные сеансы истекают через 10 минут:

...