Java: проверка фильтра тайм-аута HttpSession возвращает действительный объект сеанса

Мое веб-приложение - это чисто JS-приложение с перекрестком js для маршрутизации. Для входа в систему я использую j_security_check FORM Auth и сервлет /LogOut для аннулирования сеанса.

Проблема 1 Настоящая проблема возникает, когда время сеанса истекло, файл login.html отображается в части страницы без css с ошибкой «Ресурс интерпретируется как таблица стилей, но передается с типом MIME text/html». '

При использовании фильтра

<filter>
    <description>Session Timeout Filter</description>
    <filter-name>SessionTimeoutFilter</filter-name>
    <filter-class>filters.SessionTimeoutFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SessionTimeoutFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
....
<session-config>
    <session-timeout>1</session-timeout>
</session-config>

и JAVA-код

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {

    HttpServletRequest req = null;
    HttpSession session = null;
    try {
        req = (HttpServletRequest) request;
        session = req.getSession(false);
        if (session != null && !session.isNew()){
            LOGGER.log("Session is Valid");
            chain.doFilter(request, response);
        }else{
            LOGGER.log("Session is Invalid");
            req.getRequestDispatcher("/login.html?loggedOut=true").forward(request, response);
        }            
    } catch (Throwable t) {

    }

}

Проблема 2 Когда фильтр запускается после 2-3 минут бездействия, он печатает "Сеанс действителен". Почему это так?


person Prateek Agarwal    schedule 04.07.2016    source источник


Ответы (1)


Выпуск 1:

Когда сеанс недействителен, фильтр перехватывает запросы и перенаправляет на login.html. login.html включает файл CSS. Таким образом, браузер отправляет HTTP-запрос на файл CSS. Но ваш фильтр сопоставлен с /*. Таким образом, он перехватывает каждый запрос, включая запрос, отправленный браузером для файла CSS. И поскольку сессия по-прежнему недействительна, браузер перенаправляет запрос, который должен отправить файл CSS, на login.html.

Выпуск 2:

Я не знаю. Возможно, ваш сервер использует фоновый поток, очищающий сеансы с истекшим временем ожидания каждые несколько минут, и он еще не был выполнен, хотя ваш очень короткий тайм-аут истек. Или, может быть, браузер отправляет запросы в фоновом режиме, которые поддерживают активность сеанса.

person JB Nizet    schedule 04.07.2016
comment
Для проблемы 1 я включил проверку в фильтре, чтобы продолжить фильтрацию, если запрос для входа в систему HTML и CSS. Даже в этом случае проблема остается. - person Prateek Agarwal; 05.07.2016