SpringBoot内嵌Tomcat(7)【Session创建】源码简析

编程

在前文中讲述到: 在 org.apache.catalina.connector. CoyoteAdapter .service  -> CoyoteAdapter.postParseRequest 方法内对 request进行解析: 从cookies或SSL上下文中获取RequestedSessionId 进行验证Context。

Tomcat中主要由每个org.apache.catalina.Context容器内的一个org.apache.catalina.Manager对象( org.apache.catalina.session.StandardManager)来管理org.apache.catalina.Session

public class StandardSession implements HttpSession, Session, Serializable {

...

// 保存Session内属性

protected ConcurrentMap<String, Object> attributes = new ConcurrentHashMap<>();

...

}

那SessionId是如何生成的呢?

org.apache.catalina.filters.SessionInitializerFilter


执行org.apache.catalina.connector.Request.doGetSession 方法:

如果request从cookies或SSL上下文中获取到的RequestedSessionId 不为空,则直接从Context获取到 Manager。

不然则Manager.createSession方法创建一个,注入到cookie中。

在org.apache.catalina.session.ManagerBase.createSession创建过程里:

  1. 优先判定最大维持的有效session数量。
  2. 设置session的维持时长(从Context对象中获取的配置) getContext().getSessionTimeout() * 60
  3. org.apache.catalina.util.StandardSessionIdGenerator.generateSessionId()方法创建SessionId

 

以上是 SpringBoot内嵌Tomcat(7)【Session创建】源码简析 的全部内容, 来源链接: utcz.com/z/515652.html

回到顶部