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 立即找到会话,而不是在会话存储库中再次查找它以节省时间。

也许您当前的设置只调用它一次,但如果您将自定义过滤器添加到处理链或从端点访问会话,这可能会改变。