From ae9268004ddbf462fd16db6aa9f06065ed4de1cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Gru=CC=88ndler?= Date: Thu, 13 Feb 2020 08:36:00 +0100 Subject: [PATCH 1/2] Added debug logging to DefaultWebSessionManager See gh-24518 --- .../server/session/DefaultWebSessionManager.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java b/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java index 60e2d4352a5..1236f3d777f 100644 --- a/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java +++ b/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java @@ -18,10 +18,13 @@ package org.springframework.web.server.session; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.util.Assert; +import org.springframework.web.context.request.async.WebAsyncManager; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebSession; @@ -36,6 +39,8 @@ import org.springframework.web.server.WebSession; */ public class DefaultWebSessionManager implements WebSessionManager { + private static final Log logger = LogFactory.getLog(DefaultWebSessionManager.class); + private WebSessionIdResolver sessionIdResolver = new CookieWebSessionIdResolver(); private WebSessionStore sessionStore = new InMemoryWebSessionStore(); @@ -79,7 +84,12 @@ public class DefaultWebSessionManager implements WebSessionManager { @Override public Mono getSession(ServerWebExchange exchange) { return Mono.defer(() -> retrieveSession(exchange) - .switchIfEmpty(this.sessionStore.createWebSession()) + .switchIfEmpty(Mono.defer(() -> { + if (logger.isDebugEnabled()) { + logger.debug("Did not find an existing WebSession, creating a new one."); + } + return this.sessionStore.createWebSession(); + })) .doOnNext(session -> exchange.getResponse().beforeCommit(() -> save(exchange, session)))); } @@ -95,6 +105,9 @@ public class DefaultWebSessionManager implements WebSessionManager { if (!session.isStarted() || session.isExpired()) { if (!ids.isEmpty()) { // Expired on retrieve or while processing request, or invalidated.. + if (logger.isDebugEnabled()) { + logger.debug("Expiring existing sessionIds while saving session."); + } this.sessionIdResolver.expireSession(exchange); } return Mono.empty(); From de608a08ed9517a64cfc279810cbb55071017490 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 20 Feb 2020 15:54:19 +0000 Subject: [PATCH 2/2] Polishing contribution See gh-24518 --- .../session/DefaultWebSessionManager.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java b/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java index 1236f3d777f..cde58e392ea 100644 --- a/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java +++ b/spring-web/src/main/java/org/springframework/web/server/session/DefaultWebSessionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +24,6 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import org.springframework.util.Assert; -import org.springframework.web.context.request.async.WebAsyncManager; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebSession; @@ -41,6 +40,7 @@ public class DefaultWebSessionManager implements WebSessionManager { private static final Log logger = LogFactory.getLog(DefaultWebSessionManager.class); + private WebSessionIdResolver sessionIdResolver = new CookieWebSessionIdResolver(); private WebSessionStore sessionStore = new InMemoryWebSessionStore(); @@ -84,15 +84,18 @@ public class DefaultWebSessionManager implements WebSessionManager { @Override public Mono getSession(ServerWebExchange exchange) { return Mono.defer(() -> retrieveSession(exchange) - .switchIfEmpty(Mono.defer(() -> { - if (logger.isDebugEnabled()) { - logger.debug("Did not find an existing WebSession, creating a new one."); - } - return this.sessionStore.createWebSession(); - })) + .switchIfEmpty(createWebSession()) .doOnNext(session -> exchange.getResponse().beforeCommit(() -> save(exchange, session)))); } + private Mono createWebSession() { + Mono session = this.sessionStore.createWebSession(); + if (logger.isDebugEnabled()) { + session = session.doOnNext(s -> logger.debug("Created new WebSession.")); + } + return session; + } + private Mono retrieveSession(ServerWebExchange exchange) { return Flux.fromIterable(getSessionIdResolver().resolveSessionIds(exchange)) .concatMap(this.sessionStore::retrieveSession) @@ -106,7 +109,7 @@ public class DefaultWebSessionManager implements WebSessionManager { if (!ids.isEmpty()) { // Expired on retrieve or while processing request, or invalidated.. if (logger.isDebugEnabled()) { - logger.debug("Expiring existing sessionIds while saving session."); + logger.debug("WebSession expired or has been invalidated"); } this.sessionIdResolver.expireSession(exchange); }