2012-02-01 2 views
2

В настоящее время у меня есть веб-приложение, использующее Spring Security, размещенное на сервере JBoss 5.Весенний тайм-аут сеанса безопасности - очистить кеш браузера

Моя проблема заключается в том, что если пользователь простаивает в течение нескольких минут, их сеанс отключается из-за установки web.xml. Время от времени, когда вы пытаетесь попасть в webapp, когда их сессия недействительна, они получают ошибку 404. Единственный способ, которым браузер может видеть веб-приложение, - это когда пользователь очищает свой кеш браузера.

Есть ли способ исправить это, так что пользователю не нужно очищать свой кеш браузера?

Вот моя весна XML безопасности

<security:http auto-config="true" use-expressions="true"> 
    <security:intercept-url pattern="/login" access="permitAll" /> 
    <security:intercept-url pattern="/resources/**" access="permitAll" /> 
    <security:intercept-url pattern="/import/trades" access="permitAll" /> 
    <!-- 
     The roles are prefix with the word ROLE 
     and it is upper case due to ldapAuthoritiesPopulator config section 
    --> 
    <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_NBFIEPN_USERS', 'ROLE_NBFIEPN_DEVELOPERS')" />   

    <security:form-login login-page="/login" authentication-failure-url="/login?error=true"/> 

    <security:logout /> 
</security:http> 

Вот мой файл web.xml. В настоящее время я установил тайм-аут сеанса на 1 минуту, чтобы воспроизвести проблему.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

    <display-name>TBA Web Application</display-name> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/spring/security-config.xml 
     </param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>horizon</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value> 
       /WEB-INF/spring/applicationContext.xml 
       /WEB-INF/spring/applicationContext-service.xml 
       /WEB-INF/spring/mvc-config.xml 
      </param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>horizon</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Session Timeout in minutes --> 
    <session-config> 
     <session-timeout>1</session-timeout> 
    </session-config> 

</web-app> 

ответ

5

Добавить эту конфигурацию в конфигурации системы безопасности пружинного

<security:http...> 
    ... 
    <security:session-management invalid-session-url="/login"/> 
</security:http> 

Desription для invalid-session-url параметра:

URL, к которому пользователь будет перенаправлен, если они представляют недопустимый сеанс Indentifier. Обычно используется для определения тайм-аутов сеанса.

Он должен направлять пользователя с недопустимым сеансом на страницу входа.

+0

Благодарим за помощь. Это на самом деле оказалось проблемой сервера JBoss. Один из моих серверов JBoss в кластере был плохим. –