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创建过程里:
- 优先判定最大维持的有效session数量。
- 设置session的维持时长(从Context对象中获取的配置) getContext().getSessionTimeout() * 60
- org.apache.catalina.util.StandardSessionIdGenerator.generateSessionId()方法创建SessionId
以上是 SpringBoot内嵌Tomcat(7)【Session创建】源码简析 的全部内容, 来源链接: utcz.com/z/515652.html