Session timeout测试环境不生效

一、问题:
版本是SpringBoot 2.1.9

内嵌Tomcat 管理Session 默认时长1800s。当前版本配置sever.servlet.session.timeout 参数来管理session 失效时长,本地项目有生效,但是Jenkins 构建后测试环境仍然是1800s。哪位巨巨能解答下???

# session 时长单位s
server:
  servlet:
    session:
      timeout: 12h

二、原因
server.servlet.session.timeout 参数对于SpringBoot 内嵌的Tomcat 生效。本地开发环境走的内嵌Tomcat;
测试环境使用的是WAR 包,部署在外部Tomcat 中,该参数对外部Tomcat 不生效。

三、解决方案
待更新

你是不是有多个环境啊。profile。本地和jenkins加载的是同一个环境的配置文件么?

有多个环境,application-dev,application-test
但这种基础配置,我放在application.yml 里了,不管哪个环境都会走这个配置的。
我先去尝试下,给每个环境都加上。

这就不知道咋回事儿了。你要不然设置个监听器看看,监听一下会话的失效。确定一下是不是由 Session过期导致的。

那我去监听下看看

解决方案:
因为此处是外部Tomcat,使用配置server.servlet.session.timeout无效。

方式一:可以使用web.xml 来处理

<session-config>  
         <session-timeout>30</session-timeout>  
</session-config>

方式二:可以直接改Tomcat 配置,一般不推荐,除非Tomcat 只服务于这一个应用程序。
Tomcat 的conf 下web.xml 中的

<Context path="/test" docBase="/test" defaultSessionTimeOut="43200" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/> 

方式三:在程序中设置session 失效时长,比如在用户登录成功后设置。
此处我使用的是该方式。

/*12h*/
session.setMaxInactiveInterval(43200);
2 Likes