Springboot2 session设置超时时间无效

问题: 

         今天项目中遇到了一个设置时间超时的问题,按SpringBoot2的application.properties更改一直不生效。

解决方案:

  •  server.*属性用于控制Spring Boot使用的嵌入式容器 。 Spring Boot将使用ServletWebServerFactory实例之一创建servlet容器的实例。 这些类使用server.*属性来配置受控的servlet容器(tomcat,jetty等)。
  • 当应用程序作为war文件部署到Tomcat实例时, server.*属性不适用。 它们不适用,因为可以使用预先配置的servlet容器(因为它是远程运行的服务)。 因此,部署到远程Tomcat将使server.*属性无用。

      1. 按照网上给的帖子更改配置文件(如果是Jar启动生效) ,如下图:

server:
  servlet:
    session:
      timeout: PT1H        # 1小时过期
      cookie:
        max-age: PT1H      # 1小时过期

说明:PT1H 意思是设置session失效的时间是1小时。

扩展:Duration
    通过查看springboot源码发现setTimeouot方法,这里要求传入Duration的实例
    public void setTimeout(Duration timeout) {
       this.timeout = timeout;
    }


  Duration是在Java8中新增的,主要用来计算日期差值,Duration是被final声明的,并且是线程安全的。
  如果转换字符串方式,类似于 SimpleDateFormat 的格式化日期方式 
  Duration 字符串类似数字有正负之分:默认为正,负以'-'开头,下面紧接着'PT', 下面时间字母: 
    'D' – 天 
    'H' – 小时 
    'M' – 分钟 
    'S' – 秒 


    每个单位都必须由数字开始,且时分秒顺序不能乱,比如:PT2H3M2S 等于 -PT-2H-3M-2S。
   2. 设置tomcat的session超时

1)在tomcat的conf目录下,更改servler.xml:

<Context path="/abtest" docBase="/abtest"  
  defaultSessionTimeOut="3600" isWARExpanded="true"  
  isWARValidated="false" isInvokerEnabled="true"  
  isWorkDirPersistent="false"/>

2) 项目中更改web.xml:
<session-config>  
    <session-timeout>20</session-timeout>  
</session-config>

3)在程序中更改
session.setMaxInactiveInterval(30*60);

当你遇到同样的问题时,请先看上面的红字,按顺序排查即可。

测试代码:

@RestController
@RequestMapping("/valid-time")
public class TestController {

    @GetMapping("/test")
    public String validTime(HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();

        int sessionTime = session.getMaxInactiveInterval();

        return new StringBuilder("sessionTime=").append(sessionTime).toString();
    }
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值