美文网首页
SpringBoot设置Session失效时间

SpringBoot设置Session失效时间

作者: 一觉睡到丶小时候 | 来源:发表于2021-01-04 08:39 被阅读0次

    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失效时间

          本文链接:https://www.haomeiwen.com/subject/xpymoktx.html