聊聊springboot session timeout参数设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊springboot session timeout参数设置相关的知识,希望对你有一定的参考价值。

参考技术A 本文主要介绍下spring boot中对session timeout参数值的设置过程。

spring-boot-autoconfigure-1.5.8.RELEASE-sources.jar!/org/springframework/boot/autoconfigure/web/ServerProperties.java

spring-boot-1.5.8.RELEASE-sources.jar!/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java

可以从源码看到,如果设置小于60秒的话,则会默认取1分钟

tomcat-embed-core-8.5.23-sources.jar!/org/apache/catalina/core/StandardContext.java

tomcat-embed-core-8.5.23-sources.jar!/org/apache/catalina/session/StandardSession.java

这个是在这个方法中更新

tomcat-embed-core-8.5.23-sources.jar!/org/apache/coyote/http11/Http11Processor.java

tomcat-embed-core-8.5.23-sources.jar!/org/apache/catalina/connector/CoyoteAdapter.java

tomcat-embed-core-8.5.23-sources.jar!/org/apache/catalina/connector/Request.java
里头的方法会调用recycleSessionInfo

tomcat-embed-core-8.5.23-sources.jar!/org/apache/catalina/core/ApplicationDispatcher.java

tomcat-embed-core-8.5.23-sources.jar!/org/apache/catalina/core/ApplicationHttpRequest.java

聊聊Python的time模块

     time模块  

     time模块是很多人最早接触到的模块,像time.sleep(x)好像随处可见,但是time模块里面的其他方法呢?下面一起看一下time模块。

     在Python中一般用这3种方式表示时间:

     1.时间戳,包括time()等函数

     2.格式化的时间字符  包括asctime()等函数

     3.时间元组    包括localtime()等函数

     分别举例如下:

print(time.time())
>>> 1553149608.6831224

      time得到的时间单位是秒,那么这个秒是怎么来的呢?这是从1970年1月1日0点0分0秒开始计时,一直到现在经历的秒数(不信可以自己算一下)。为什么是1970?这一年发生了很多大事,比如Unix诞生了。

print(time.localtime())
>>> time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=14, tm_min=27, tm_sec=24, tm_wday=3, tm_yday=80, tm_isdst=0)
#从左到右依次是当前时间的年,月,日,时,分,秒,一周中第几天,一年中第几天,夏令时 

print(time.localtime(time.time())) >>> time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=14, tm_min=27, tm_sec=24, tm_wday=3, tm_yday=80, tm_isdst=0)

      这里得到的是一个元组,两个print得到的结果是一样的,说明localtime中有一个默认参数,就是time.time(),你也可以吧time.time()拿到的时间(1553149608.6831224)当做参数,得到的结果也是一样的。

print(time.gmtime())
>>> time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=6, tm_min=27, tm_sec=24, tm_wday=3, tm_yday=80, tm_isdst=0)

      gmtime和localtime的用法是一样的,结果似乎也一样,但仔细一看发现tm_hour好像少8,这是为什么呢?因为我所在的中国位于东8区,gmtime获取的时间是零度经线的时间,没记错的话,应该是英国的格林尼治天文台所在的经度,也叫本初子午线嘛。

print(time.mktime(time.localtime()))
>>>1553150685.0

      mktime可以把得到的元组转化成时间戳。

print(time.asctime())
>>>Thu Mar 21 14:48:48 2019

print(type(time.asctime()))
>>><class \'str\'>

print(time.asctime(time.localtime()))
>>>Thu Mar 21 14:48:48 2019

 

         asctime可以把时间元组转化成一个固定格式的字符串,默认参数就是time.localtime拿到的元组。

print(time.ctime())
>>>Thu Mar 21 14:53:36 2019

print(time.ctime(time.time()))
>>>Thu Mar 21 14:53:36 2019

        ctime和asctime拿到的结果一样,但是参数是时间戳,默认就是time.time()

print(time.strftime(\'%Y-%m-%d %H:%M:%S\'))
>>>2019-03-21 15:00:50

print(time.strftime(\'%Y-%m-%d %X\'))
>>>2019-03-21 15:00:50

print(time.strptime(\'2019-03-21 14:57:45\',\'%Y-%m-%d %X\'))
>>>time.struct_time(tm_year=2019, tm_mon=3, tm_mday=21, tm_hour=14, tm_min=57, tm_sec=45, tm_wday=3, tm_yday=80, tm_isdst=-1)

       strftime可以按一定的规则,将时间元组转化成格式化字符串形式,如果没有时间元组参数,就默认为localtime。前面两个print结果是一样的,就是说%X可以代替%H:%M:%S,这是一种简写。strptime和strftime作用是相反的,注意格式要和输入的格式化字符串一致,不然就会报错了,format默认为:"%a %b %d %H:%M:%S %Y"。

      到这里,上面三种时间的转化关系已经出来了:

 

      sleep就不用讲了,就是线程推迟指定时长后运行,单位是秒,正常理解为等待就行,time模块基本就这些内容了。

 

 

 

 

      

 

     

 

以上是关于聊聊springboot session timeout参数设置的主要内容,如果未能解决你的问题,请参考以下文章

聊聊springboot2的httptrace

聊聊什么是SpringBoot 的自动装配原理

聊聊springboot项目全局异常处理那些事儿

聊聊如何让springboot拦截器的执行顺序按我们想要的顺序执行

聊聊gost的CountWatch

session&&cookie