0

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

Выпуск 1 Реальная проблема возникает, когда сеанс истек, то login.html визуализируется в части страницы, без CSS, с ошибкой «интерпретируется, как ресурс, но передается стили с MIME типа текстом/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 минут, он печатает «Сессия действительна». Почему это так?

ответ

0

Выпуск 1:

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

Выпуск 2:

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

+0

Для проблемы 1 я включил проверку фильтра, чтобы продолжить фильтрацию, если запрос предназначен для входа в систему HTML и CSS. Даже в этом случае проблема сохраняется. –