一、问题:
版本是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