Polish "Add support for configuring a custom SessionTimeout bean"

See gh-49883
This commit is contained in:
Stéphane Nicoll
2026-04-07 15:08:09 +02:00
parent 4cef72b798
commit b103d2bb4c
3 changed files with 25 additions and 0 deletions
@@ -27,6 +27,7 @@ spring:
For setting the timeout of the session you can use the configprop:spring.session.timeout[] property.
If that property is not set with a servlet web application, the auto-configuration falls back to the value of configprop:server.servlet.session.timeout[].
To provide the timeout programmatically, define a javadoc:org.springframework.boot.session.autoconfigure.SessionTimeout[] bean.
You can take control over Spring Session's configuration using `@Enable*HttpSession` (servlet) or `@EnableRedisWebSession` (reactive).
This will cause the auto-configuration to back off.
@@ -30,6 +30,7 @@ import org.springframework.boot.context.properties.source.InvalidConfigurationPr
import org.springframework.boot.data.redis.autoconfigure.DataRedisAutoConfiguration;
import org.springframework.boot.session.autoconfigure.AbstractSessionAutoConfigurationTests;
import org.springframework.boot.session.autoconfigure.SessionAutoConfiguration;
import org.springframework.boot.session.autoconfigure.SessionTimeout;
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
import org.springframework.boot.test.context.runner.ContextConsumer;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
@@ -104,6 +105,17 @@ class SessionDataRedisAutoConfigurationTests extends AbstractSessionAutoConfigur
});
}
@Test
void defaultConfigWithCustomSessionTimeoutBean() {
this.contextRunner.withBean(SessionTimeout.class, () -> () -> Duration.ofSeconds(4))
.withPropertyValues("spring.data.redis.host=" + redis.getHost(),
"spring.data.redis.port=" + redis.getFirstMappedPort(), "spring.session.timeout=1m")
.run((context) -> {
RedisSessionRepository repository = validateSessionRepository(context, RedisSessionRepository.class);
assertThat(repository).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval", Duration.ofSeconds(4));
});
}
@Test
void defaultRedisSessionStoreWithCustomizations() {
this.contextRunner
@@ -34,6 +34,7 @@ import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
import org.springframework.boot.liquibase.autoconfigure.LiquibaseAutoConfiguration;
import org.springframework.boot.session.autoconfigure.AbstractSessionAutoConfigurationTests;
import org.springframework.boot.session.autoconfigure.SessionAutoConfiguration;
import org.springframework.boot.session.autoconfigure.SessionTimeout;
import org.springframework.boot.sql.init.DatabaseInitializationMode;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
@@ -108,6 +109,17 @@ class JdbcSessionAutoConfigurationTests extends AbstractSessionAutoConfiguration
});
}
@Test
void customSessionTimeoutBean() {
this.contextRunner.withBean(SessionTimeout.class, () -> () -> Duration.ofSeconds(4))
.withPropertyValues("spring.session.timeout=1m")
.run((context) -> {
JdbcIndexedSessionRepository repository = validateSessionRepository(context,
JdbcIndexedSessionRepository.class);
assertThat(repository).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval", Duration.ofSeconds(4));
});
}
@Test
void customTableName() {
this.contextRunner.withPropertyValues("spring.session.jdbc.table-name=FOO_BAR",