Программно изменить время ожидания сеанса - PullRequest
2 голосов
/ 28 мая 2011

Я могу выйти из системы через определенное время бездействия.

<session-timeout>240</session-timeout> 

Но есть ли способ выйти из системы в указанное время или лучше, например, до 5 минут бездействия после указанного времени ??1004*

Ответы [ 3 ]

4 голосов
/ 30 мая 2011

Вы можете изменить время ожидания сеанса на HttpSession#setMaxInactiveInterval(), где вы можете указать желаемое время ожидания в секундах.

Когда вы хотите охватить широкий диапазон запросов на это, например, всестраниц в папке /admin или что-то, тогда лучшее место для этого - создать Filter, который сопоставлен с FacesServlet, который примерно выполняет следующую работу:

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpSession session = request.getSession();

    if (request.getRequestURI().startsWith("/admin/")) {
        session.setMaxInactiveInterval(60 * 5); // 5 minutes.
    } else {
        session.setMaxInactiveInterval(60 * 240); // 240 minutes.
    }

    chain.doFilter(req, res);
}

В управляемом компоненте JSF сеанс доступен по ExternalContext#getSession():

HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession();
// ...

Или, когда вы уже используете JSF 2.1, вы также можете использовать новый ExternalContext#setSessionMaxInactiveInterval(), который делегирует именно этому методу.

1 голос
/ 30 мая 2011

То, что дал вам Божо, верно, скорее всего, вы видите, что когда вы нажимаете кнопку выхода из системы, сеанс уничтожается, но контейнер сервлета затем перенаправляется на страницу «после выхода из системы», которая автоматическивызывает создание сеанса (следовательно, «Session Destroyed», а затем «Session Created»).

Если не считать создания собственной системы обработки сеансов, я не знаю, как вы обойдете это.(У меня была эта проблема в прошлом, и она исчезла после того, как мы создали нашу собственную систему сеансов)

1 голос
/ 28 мая 2011

Автоматически - нет.

Вам необходимо:

  • сохранить все сеансы в Set.Сделайте это в HttpSessionListener, когда они будут созданы.
  • в данный момент (например, с использованием кварца) .invalidate() им
...