requestedSessionCached是干什么的,什么情况下变为true
What does requestedSessionCached do, and under what circumstances does it become true
我一直在学习SpringSession的源码,发现在SessionRepositoryRequestWrapper中class包含了一个布尔值:RequestedSessionCached,在getRequestedSession方法中用于判断session是否被缓存。但是每次发送调试源码的请求都是false,那么requestedSessionCached到底是干什么的,什么情况下才变成true呢?
private final class SessionRepositoryRequestWrapper extends HttpServletRequestWrapper {
private final HttpServletResponse response;
private S requestedSession;
private boolean requestedSessionCached;
private String requestedSessionId;
private Boolean requestedSessionIdValid;
private boolean requestedSessionInvalidated;
}
private S getRequestedSession() {
if (!this.requestedSessionCached) {
List<String> sessionIds = SessionRepositoryFilter.this.httpSessionIdResolver.resolveSessionIds(this);
for (String sessionId : sessionIds) {
if (this.requestedSessionId == null) {
this.requestedSessionId = sessionId;
}
S session = SessionRepositoryFilter.this.sessionRepository.findById(sessionId);
if (session != null) {
this.requestedSession = session;
this.requestedSessionId = sessionId;
break;
}
}
this.requestedSessionCached = true;
}
return this.requestedSession;
}
这是针对 getRequestedSession()
在处理请求期间被多次调用的情况的优化。
它会return 立即找到会话,而不是在会话存储库中再次查找它以节省时间。
也许您当前的设置只调用它一次,但如果您将自定义过滤器添加到处理链或从端点访问会话,这可能会改变。
我一直在学习SpringSession的源码,发现在SessionRepositoryRequestWrapper中class包含了一个布尔值:RequestedSessionCached,在getRequestedSession方法中用于判断session是否被缓存。但是每次发送调试源码的请求都是false,那么requestedSessionCached到底是干什么的,什么情况下才变成true呢?
private final class SessionRepositoryRequestWrapper extends HttpServletRequestWrapper {
private final HttpServletResponse response;
private S requestedSession;
private boolean requestedSessionCached;
private String requestedSessionId;
private Boolean requestedSessionIdValid;
private boolean requestedSessionInvalidated;
}
private S getRequestedSession() {
if (!this.requestedSessionCached) {
List<String> sessionIds = SessionRepositoryFilter.this.httpSessionIdResolver.resolveSessionIds(this);
for (String sessionId : sessionIds) {
if (this.requestedSessionId == null) {
this.requestedSessionId = sessionId;
}
S session = SessionRepositoryFilter.this.sessionRepository.findById(sessionId);
if (session != null) {
this.requestedSession = session;
this.requestedSessionId = sessionId;
break;
}
}
this.requestedSessionCached = true;
}
return this.requestedSession;
}
这是针对 getRequestedSession()
在处理请求期间被多次调用的情况的优化。
它会return 立即找到会话,而不是在会话存储库中再次查找它以节省时间。
也许您当前的设置只调用它一次,但如果您将自定义过滤器添加到处理链或从端点访问会话,这可能会改变。