应用程序属性“ server.servlet.session.timeout”在Spring Boot项目中不起作用

Avi*_*rua 8 java session spring tomcat server

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

server.servlet.session.timeout= 300s
Run Code Online (Sandbox Code Playgroud)

application.properties文件中。在这篇文章Spring Boot文档中也是如此。但不幸的是,这对我不起作用。

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

Avi*_*rua 6

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

src
 |_ main
     |_ java
     |_ resources
     |_ webapp
         |_ WEB-INF
              |_ web.xml
Run Code Online (Sandbox Code Playgroud)

而在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>
Run Code Online (Sandbox Code Playgroud)

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


Nel*_*eva 6

此问题的一个可能原因可能是使用@EnableRedisHttpSession. 如本答案所述

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

希望这可以帮助某人。


小智 5

您可以使用方法1:

server.servlet.session.timeout=30s
server.servlet.session.cookie.max-age=30s
Run Code Online (Sandbox Code Playgroud)

它对我来说很好用