diff --git a/spring-web-reactive/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java b/spring-web-reactive/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java index 295db4f880..bbd7342fca 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java @@ -39,15 +39,9 @@ public class DefaultServerWebExchange implements ServerWebExchange { private final ServerHttpResponse response; - private final WebSessionManager sessionManager; - - private final Map attributes = new ConcurrentHashMap<>(); - private final Object createSessionLock = new Object(); - - private Mono sessionMono; - + private final Mono sessionMono; public DefaultServerWebExchange(ServerHttpRequest request, ServerHttpResponse response, @@ -58,7 +52,7 @@ public class DefaultServerWebExchange implements ServerWebExchange { Assert.notNull(response, "'sessionManager' is required."); this.request = request; this.response = response; - this.sessionManager = sessionManager; + this.sessionMono = sessionManager.getSession(this).cache(); } @@ -84,13 +78,6 @@ public class DefaultServerWebExchange implements ServerWebExchange { @Override public Mono getSession() { - if (this.sessionMono == null) { - synchronized (this.createSessionLock) { - if (this.sessionMono == null) { - this.sessionMono = this.sessionManager.getSession(this).cache(); - } - } - } return this.sessionMono; } diff --git a/spring-web-reactive/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java b/spring-web-reactive/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java index 64a5e58b2e..6e51319ac2 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java @@ -99,12 +99,13 @@ public class DefaultWebSessionManager implements WebSessionManager { @Override public Mono getSession(ServerWebExchange exchange) { - return Flux.fromIterable(getSessionIdResolver().resolveSessionIds(exchange)) - .concatMap(this.sessionStore::retrieveSession) - .next() - .then(session -> validateSession(exchange, session)) - .otherwiseIfEmpty(createSession(exchange)) - .map(session -> extendSession(exchange, session)); + return Mono.defer(() -> + Flux.fromIterable(getSessionIdResolver().resolveSessionIds(exchange)) + .concatMap(this.sessionStore::retrieveSession) + .next() + .then(session -> validateSession(exchange, session)) + .otherwiseIfEmpty(createSession(exchange)) + .map(session -> extendSession(exchange, session))); } protected Mono validateSession(ServerWebExchange exchange, WebSession session) {