【问题标题】:Application property "server.servlet.session.timeout" is not working in Spring Boot project应用程序属性“server.servlet.session.timeout”在 Spring Boot 项目中不起作用
【发布时间】:2019-06-09 03:59:33
【问题描述】:

根据Spring Boot的文档,可以通过设置来配置会话超时

server.servlet.session.timeout= 300s

application.properties 文件中。在this postSpring Boot documentation 中也是这样说的。但不幸的是,这对我不起作用。

还有其他配置可以达到预期的效果吗?

【问题讨论】:

  • server.* 属性仅在您使用嵌入式容器时才有效。如果您要部署到 Tomcat,这些将无法正常工作,因为 Spring Boot 没有控制容器。
  • @M.Deinum,您能给我一些建议吗,如何在我当前在服务器上运行的项目中设置会话超时?
  • 通过包含web.xmlweb-fragment.xml 并像您通常那样设置会话超时。
  • @M.Deinum,你能给我任何参考吗?
  • 参考什么?只需检查如何在常规 Web 应用程序中设置会话超时。这也适用于此。

标签: java spring session tomcat server


【解决方案1】:

你可以使用 方法一:

server.servlet.session.timeout=30s
server.servlet.session.cookie.max-age=30s

对我来说很好用

【讨论】:

  • 根据春季最近的文档server.session.timeout 现在已弃用。您可以查看第一个链接
  • ok 如果你使用的是 spring boot 2.0 版,你可以使用 server.servlet.session.timeout。只需设置小时间,不要在这么长时间内执行任何活动并检查,我认为它应该可以工作
  • 你有没有尝试过你的项目?实际上在我的项目server.session.timeout 这条线给出红色警报:/
  • 也将其设置为小于 1 分钟的值是行不通的。 tomcat 中的会话收割线程每分钟运行一次……因此,即使将其设置为更小的值也无法可靠地工作。
  • 是在 server.servlet.session.cookie.max-age=30s 期间触发功能的任何方式,甚至被触发
【解决方案2】:

此问题的一个可能原因可能是使用@EnableRedisHttpSession。正如answer 中所解释的:

通过使用@EnableRedisHttpSession,您告诉 Spring Boot 您希望完全控制基于 Redis 的 HTTP 会话的配置。结果,它的自动配置退出并且 server.servlet.session.timeout 没有效果。如果你想使用 server.servlet.session.timeout 那么你应该删除@EnableRedisHttpSession。或者,如果你想使用 @EnableRedisHttpSession 那么你应该使用 maxInactiveIntervalInSeconds 属性来配置会话超时。

希望这对某人有所帮助。

【讨论】:

    【解决方案3】:

    我发布答案是因为这种情况对我来说是新的。而且我还没有一步一步得到正确的解决方案。 根据M. Deinum 的建议,我在WEB-INF 文件夹下创建了一个web.xml 文件。项目结构是这样的

    src
     |_ main
         |_ java
         |_ resources
         |_ webapp
             |_ WEB-INF
                  |_ web.xml
    

    而在web.xml我配置了<session-timeout>...</session-timeout>

    我的web.xml 就像

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

    现在我的 webapp 在服务器中的会话时间正在根据我的配置工作。感谢M. Deinum

    【讨论】:

    • 即使在 spring-boot 内部容器中也能正常工作吗?谢谢
    • 如果您要部署到 Wildfly 或 JBOS App Server,您必须将 web.xml 文件重命名为 jboss-web.xml
    • @peterzinho16 我没有尝试过 Wildfly 或 JBOS。所以不知道。
    【解决方案4】:

    使用HttpSessionListener

    server.servlet.session.timeout 仅适用于嵌入式容器。

    @Configuration
    public class MyHttpSessionListener implements HttpSessionListener {
        @Override
        public void sessionCreated(HttpSessionEvent event) {
            event.getSession().setMaxInactiveInterval(30);
        }
    }
    

    【讨论】:

      【解决方案5】:

      spring doc 最新版本的 SpringBoot 使用了以下属性。

      server.servlet.session.timeout=30m
      

      【讨论】:

      • 我已经提到过,我阅读了该文档但没有任何改变!
      【解决方案6】:

      也许你添加了记住我。这将使会话始终有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-29
        • 2020-11-07
        • 1970-01-01
        • 2018-03-15
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        相关资源
        最近更新 更多