Spring Security 会话超时太短

Posted

技术标签:

【中文标题】Spring Security 会话超时太短【英文标题】:Spring Security session timeout is too short 【发布时间】:2014-10-18 15:06:43 【问题描述】:

我不知道怎么做,但是会话超时非常短。据我所知,Spring Security 会话超时取决于默认服务器的会话配置。我发现 GlassFish 超时为 1800 秒(10 分钟)。但我认为会话每 5 分钟删除一次。这怎么可能发生? 这是我的 Spring Security 配置:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.2.xsd">    



    <!-- enable use-expressions -->
    <http auto-config="true" use-expressions="true">

        <intercept-url pattern="/adminRole/**" access="hasRole('ROLE_ADMIN')" />

        <intercept-url pattern="/userRole/**" access="hasRole('ROLE_USER')" />

        <!-- access denied page -->
        <access-denied-handler error-page="/403" />

        <form-login 
            login-page="/" 
            default-target-url="/resolveRoles" 
            authentication-failure-url="/?error" 
            username-parameter="username"
            password-parameter="password" />
            <remember-me key="key" token-validity-seconds="2419200" />
        <logout logout-success-url="/?logout"  />
        <!-- enable csrf protection -->

    </http>



    <!-- Select users and user_roles from database -->
    <authentication-manager>
      <authentication-provider>
      <password-encoder hash="sha"/>      
        <jdbc-user-service data-source-ref="dataSource"
          users-by-username-query=
            "select username,password, enabled from smsc.users where username=?"
          authorities-by-username-query=
            "select username, role from smsc.user_roles where username =?  " />
      </authentication-provider>
    </authentication-manager>

</beans:beans>

【问题讨论】:

正如您已经说过的那样,会话超时绑定到服务器而不是 Spring Security。在 tomcat 上(以及在 glassfish 上的 afaik)这是 30 分钟(不是 10 分钟)。如果这不同,那么您要么更改了默认值,要么在 web.xml 中重新配置了它。 【参考方案1】:

spring security 中只有会话超时,但没有额外的超时(除了记住我令牌的超时,但这是另一回事)。

您可以在web.xml:内配置会话超时:

<web-app>
   <session-config>
      <!-- in minutes -->
      <session-timeout>60</session-timeout>
   </session-config>
</web-app>

【讨论】:

Ralph,我尝试将其更改为 1 分钟,但似乎没有更改...我正在使用 Grails。 @Alexander Surapel:您的 Web 应用程序是否轮询服务器? 不,它没有。当它设置为 30 分钟时它会超时。有下限吗?

以上是关于Spring Security 会话超时太短的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 中是不是存在会话超时异常?

Spring Boot,Spring Security,会话范围 Bean 的会话超时问题,@PreDestroy

具有自定义会话超时的 Spring Security [关闭]

Spring security-无限用户会话超时与IDP

SAML Spring Security 会话超时

ajax 调用无法识别 Spring Security 会话超时