Сконфигурируйте Cookie JSESSIONID так, чтобы он истекал в определенный момент времени - PullRequest
0 голосов
/ 29 мая 2018

Я работаю с WildFly 11 и JSF / Primefaces.

Я бы хотел, чтобы срок действия файлов cookie моего пользователя истек в определенный момент времени, скажем, сегодня в полночь.

Я понимаю, что могу настроить

<session-config>
    <cookie-config>
        <max-age>3600</max-age>
     </cookie-config>
</session-config>

в своем файле web.xml, чтобы установить максимальный возраст файла cookie сеанса.

Но как мне установить динамическое значение, например

<session-config>
    <cookie-config>
        <max-age>calculateMaxAgeForThisSpecificLogin()</max-age>
     </cookie-config>
</session-config>

Я был бы благодарен за любой намек в правильном направлении.

edit: Чтобы уточнить: я понимаю, что я могу установить время ожидания сеанса следующим образом:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

Или, альтернативно, время ожидания сеанса может быть установлено динамически в коде приложения.К сожалению, это не решит проблемы, с которыми я столкнулся:

  1. Тайм-аут сеанса уничтожит сеанс на стороне сервера, если не было сгенерированных запросов в течение указанного промежутка времени.Нет никакого способа предсказать, когда это будет.Если браузер продолжает генерировать запросы (например, ошибка), сеанс никогда не будет уничтожен.Насколько я понимаю, установка тайм-аута не является гарантией того, что сессия будет уничтожена в определенный момент времени.
  2. Если не указано иное, файл cookie сеанса будет действовать до тех пор, пока браузер не будет закрыт.В моей корпоративной среде это может означать, что многие пользователи просто блокируют свои рабочие станции, но никогда не закрывают свои браузеры.Даже если сеанс недействителен на стороне сервера, браузер все равно отправит, возможно, очень старый файл cookie сеанса.По умолчанию cookie JSESSIONID содержит серверную часть после последней точки (т. Е. «... app-server-1»), которая используется балансировщиками нагрузки для оценки соответствующего маршрута.Отправка старых файлов cookie сеанса может привести к непреднамеренным маршрутам через балансировщики нагрузки, что вызовет дополнительные проблемы в отношении управления версиями.

Итак, установка max-age поможет, так как браузеры прекратят отправлять очень старые сеансовые куки.

Мой вопрос направлен на то, чтобы установить определенный момент времени, чтобы cookie JSESSIONID мог согласовать распределение нагрузки и управление версиями с временем жизни сеанса и поведением браузера.

1 Ответ

0 голосов
/ 29 мая 2018

Использовать фильтр:

public class SampleFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        int cookieAge = 3600 ; //Or load from config file or database
        request.getSession().setMaxInactiveInterval(cookieAge);

        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...