SpringBoot设置Session失效时间的解决方案

 更新时间:2024年05月23日 10:58:12   作者:一觉睡到小时候  
当过期时间是大于1分钟的时候是没有什么问题的,但是如果设置过期时间小于1分钟,就会失效,这篇文章主要介绍了SpringBoot设置Session失效时间的解决方案,需要的朋友可以参考下

springboot的yml文件中设置session的过期时间

 #Session超时时间设置,单位是秒,默认是30分钟
  servlet:
    session:
      timeout: 3600s

当过期时间是大于1分钟的时候是没有什么问题的,但是如果设置过期时间小于1分钟,就会失效。

  servlet:
    session:
      timeout: 10

因为SpringBoot在TomcatServletWebServerFactory为session的过期时间做了优化。

Session的配置configureSession

private void configureSession(Context context) {
        long sessionTimeout = this.getSessionTimeoutInMinutes();
        context.setSessionTimeout((int)sessionTimeout);
        Boolean httpOnly = this.getSession().getCookie().getHttpOnly();
        if (httpOnly != null) {
            context.setUseHttpOnly(httpOnly);
        }
        if (this.getSession().isPersistent()) {
            Manager manager = context.getManager();
            if (manager == null) {
                manager = new StandardManager();
                context.setManager((Manager)manager);
            }
            this.configurePersistSession((Manager)manager);
        } else {
            context.addLifecycleListener(new TomcatServletWebServerFactory.DisablePersistSessionListener());
        }
    }

我们看到long sessionTimeout = this.getSessionTimeoutInMinutes();过期时间取自getSessionTimeoutInMinutes方法。

    private long getSessionTimeoutInMinutes() {
        Duration sessionTimeout = this.getSession().getTimeout();
        return this.isZeroOrLess(sessionTimeout) ? 0L : Math.max(sessionTimeout.toMinutes(), 1L);
    }

在这里对sessionTimeout 进行判断,首先判断是否为0或者更少isZeroOrLess方法

    private boolean isZeroOrLess(Duration sessionTimeout) {
        return sessionTimeout == null || sessionTimeout.isNegative() || sessionTimeout.isZero();
    }

sessionTimeout转换为分钟sessionTimeout.toMinutes()

    public long toMinutes() {
        return seconds / SECONDS_PER_MINUTE;
    }
    /**
     * Seconds per minute.
     */
    static final int SECONDS_PER_MINUTE = 60;

将转换后的值和1L进行比较

    public static long max(long a, long b) {
        return (a >= b) ? a : b;
    }

如果该值小于1分钟,则按1分钟算。
最后返回的是三目运算的结果。

到此这篇关于SpringBoot设置Session失效时间的文章就介绍到这了,更多相关SpringBoot设置Session失效时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis之多参数查询方式

    mybatis之多参数查询方式

    这篇文章主要介绍了mybatis之多参数查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java编程通过list接口实现数据的增删改查代码示例

    Java编程通过list接口实现数据的增删改查代码示例

    这篇文章是介绍Java编程基础方面的内容,涉及list接口的操作,通过list接口实现对数据的增删改查的相关代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • java判断ftp目录是否存在的方法

    java判断ftp目录是否存在的方法

    这篇文章主要为大家详细介绍了java判断ftp目录是否存在的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • springboot如何配置多kafka

    springboot如何配置多kafka

    这篇文章主要介绍了springboot如何配置多kafka问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java线程中断机制interrupt、isInterrupted、interrupted方法详解

    Java线程中断机制interrupt、isInterrupted、interrupted方法详解

    这篇文章主要介绍了Java线程中断机制interrupt、isInterrupted、interrupted方法详解,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已经被废弃了,需要的朋友可以参考下
    2024-01-01
  • Java中LinkedList数据结构的详细介绍

    Java中LinkedList数据结构的详细介绍

    这篇文章主要介绍了Java中LinkedList,Linked List 是 java.util 包中 Collection 框架的一部分,文中提供了详细的代码说明,需要的朋友可以参考下
    2023-05-05
  • springboot入门之profile设置方式

    springboot入门之profile设置方式

    这篇文章主要介绍了springboot入门 profile设置方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 一文详解Spring拦截链的实现原理

    一文详解Spring拦截链的实现原理

    在 Web应用开发中,拦截器(Interceptor)是一种非常重要的机制,能够在请求处理的各个阶段进行前置和后置处理,本文主要来探讨一下 Spring 拦截链的实现原理,需要的可以了解下
    2025-01-01
  • Java使用poi获取不到docx表格中书签的问题及解决

    Java使用poi获取不到docx表格中书签的问题及解决

    这篇文章主要介绍了Java使用poi获取不到docx表格中书签的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 深入浅出讲解Java8函数式编程

    深入浅出讲解Java8函数式编程

    不管是前端还是后端开发人员,学习一些函数式编程的思想和概念,对于手头的开发工作和以后的职业发展,都是大有裨益的,下面这篇文章主要给大家介绍了关于Java8函数式编程的相关资料,需要的朋友可以参考下
    2022-01-01

最新评论