如何在 Spring Security 中关闭 HTTP 会话超时?

Posted

技术标签:

【中文标题】如何在 Spring Security 中关闭 HTTP 会话超时?【英文标题】:How to turn off HTTP session timeout in Spring Security? 【发布时间】:2014-10-20 17:48:37 【问题描述】:

是否可以在 Spring Security 中关闭 HTTP 会话超时?

从这个answer我看到可以像这样在web.xml中修改HTTP会话超时:

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

但我没有从 Spring Security 手册中找到如何禁用超时。

从这个answer我看到Spring Security在内部使用了一个javax.servlet.http.HttpSession,根据这个manual page可以通过调用setMaxInactiveInterval(0)方法将其设置为永不过期。

因此,应该可以通过获取 HttpSession(如答案中的 here 所示)并将 maxInactiveInterval 更改为 0 来更改会话超时。我的问题是,如果我会在用户第一次这样做之后登录后,HttpSession中的变化是否会持续存在(即在下一个请求中,HttpSession中的变化是否仍然存在?)

是否可以像这样在 web.xml 中禁用会话超时?

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

还有一个问题,Spring Security 中默认的 HTTP 会话超时是多少?

【问题讨论】:

你真的不想这样做。它们可以持续数年,并且一直占用资源。设置一个不会给用户带来不便的大超时时间。我用了 8 个小时,但我怀疑由于资源消耗的原因,我不得不将它减少到 4 个。 感谢您的评论,我没有考虑到这一点。八小时对我来说应该足够了。 【参考方案1】:

是的。除非会话显式无效,否则下面的 sn-p 将使 HTTPSession 保持活动状态

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

【讨论】:

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

如何在我的新 Spring Boot 项目中关闭 Spring Security?

如何配置在 Spring + JDBC 中关闭自动提交?

使用simplejdbccall时如何在spring中关闭refcursor

如何在 Spring Boot 中关闭嵌入式 Tomcat?

如何在 Spring Boot 应用程序中关闭客户端 sse 连接

如何在qml中关闭工作表?