Polish "Rework Spring Session auto-configuration to use customizers"

See gh-32554
This commit is contained in:
Andy Wilkinson 2022-10-06 20:59:59 +01:00
parent ad8753923a
commit 7e47d3bbd6
6 changed files with 95 additions and 137 deletions

View File

@ -45,11 +45,8 @@ import org.springframework.session.hazelcast.config.annotation.web.http.Hazelcas
@ConditionalOnMissingBean(SessionRepository.class) @ConditionalOnMissingBean(SessionRepository.class)
@ConditionalOnBean(HazelcastInstance.class) @ConditionalOnBean(HazelcastInstance.class)
@EnableConfigurationProperties(HazelcastSessionProperties.class) @EnableConfigurationProperties(HazelcastSessionProperties.class)
class HazelcastSessionConfiguration {
@Configuration(proxyBeanMethods = false)
@Import(HazelcastHttpSessionConfiguration.class) @Import(HazelcastHttpSessionConfiguration.class)
static class SpringBootHazelcastHttpSessionConfiguration { class HazelcastSessionConfiguration {
@Bean @Bean
SessionRepositoryCustomizer<HazelcastIndexedSessionRepository> springBootSessionRepositoryCustomizer( SessionRepositoryCustomizer<HazelcastIndexedSessionRepository> springBootSessionRepositoryCustomizer(
@ -57,8 +54,7 @@ class HazelcastSessionConfiguration {
ServerProperties serverProperties) { ServerProperties serverProperties) {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
return (sessionRepository) -> { return (sessionRepository) -> {
map.from(sessionProperties map.from(sessionProperties.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds())); .to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
map.from(hazelcastSessionProperties::getMapName).to(sessionRepository::setSessionMapName); map.from(hazelcastSessionProperties::getMapName).to(sessionRepository::setSessionMapName);
map.from(hazelcastSessionProperties::getFlushMode).to(sessionRepository::setFlushMode); map.from(hazelcastSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
@ -67,5 +63,3 @@ class HazelcastSessionConfiguration {
} }
} }
}

View File

@ -50,7 +50,7 @@ import org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessi
@ConditionalOnMissingBean(SessionRepository.class) @ConditionalOnMissingBean(SessionRepository.class)
@ConditionalOnBean(DataSource.class) @ConditionalOnBean(DataSource.class)
@EnableConfigurationProperties(JdbcSessionProperties.class) @EnableConfigurationProperties(JdbcSessionProperties.class)
@Import(DatabaseInitializationDependencyConfigurer.class) @Import({ DatabaseInitializationDependencyConfigurer.class, JdbcHttpSessionConfiguration.class })
class JdbcSessionConfiguration { class JdbcSessionConfiguration {
@Bean @Bean
@ -63,25 +63,19 @@ class JdbcSessionConfiguration {
return new JdbcSessionDataSourceScriptDatabaseInitializer(dataSourceToInitialize, properties); return new JdbcSessionDataSourceScriptDatabaseInitializer(dataSourceToInitialize, properties);
} }
@Configuration(proxyBeanMethods = false)
@Import(JdbcHttpSessionConfiguration.class)
static class SpringBootJdbcHttpSessionConfiguration {
@Bean @Bean
SessionRepositoryCustomizer<JdbcIndexedSessionRepository> springBootSessionRepositoryCustomizer( SessionRepositoryCustomizer<JdbcIndexedSessionRepository> springBootSessionRepositoryCustomizer(
SessionProperties sessionProperties, JdbcSessionProperties jdbcSessionProperties, SessionProperties sessionProperties, JdbcSessionProperties jdbcSessionProperties,
ServerProperties serverProperties) { ServerProperties serverProperties) {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
return (sessionRepository) -> { return (sessionRepository) -> {
map.from(sessionProperties map.from(sessionProperties.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds())); .to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
map.from(jdbcSessionProperties::getTableName).to(sessionRepository::setTableName); map.from(jdbcSessionProperties::getTableName).to(sessionRepository::setTableName);
map.from(jdbcSessionProperties::getFlushMode).to(sessionRepository::setFlushMode); map.from(jdbcSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
map.from(jdbcSessionProperties::getSaveMode).to(sessionRepository::setSaveMode); map.from(jdbcSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
map.from(jdbcSessionProperties::getCleanupCron).to(sessionRepository::setCleanupCron); map.from(jdbcSessionProperties::getCleanupCron).to(sessionRepository::setCleanupCron);
}; };
}
} }

View File

@ -43,11 +43,8 @@ import org.springframework.session.data.mongo.config.annotation.web.reactive.Rea
@ConditionalOnMissingBean(ReactiveSessionRepository.class) @ConditionalOnMissingBean(ReactiveSessionRepository.class)
@ConditionalOnBean(ReactiveMongoOperations.class) @ConditionalOnBean(ReactiveMongoOperations.class)
@EnableConfigurationProperties(MongoSessionProperties.class) @EnableConfigurationProperties(MongoSessionProperties.class)
class MongoReactiveSessionConfiguration {
@Configuration(proxyBeanMethods = false)
@Import(ReactiveMongoWebSessionConfiguration.class) @Import(ReactiveMongoWebSessionConfiguration.class)
static class SpringBootMongoWebSessionConfiguration { class MongoReactiveSessionConfiguration {
@Bean @Bean
ReactiveSessionRepositoryCustomizer<ReactiveMongoSessionRepository> springBootSessionRepositoryCustomizer( ReactiveSessionRepositoryCustomizer<ReactiveMongoSessionRepository> springBootSessionRepositoryCustomizer(
@ -55,13 +52,10 @@ class MongoReactiveSessionConfiguration {
ServerProperties serverProperties) { ServerProperties serverProperties) {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
return (sessionRepository) -> { return (sessionRepository) -> {
map.from(sessionProperties map.from(sessionProperties.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
.to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds())); .to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds()));
map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName); map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName);
}; };
} }
} }
}

View File

@ -43,11 +43,8 @@ import org.springframework.session.data.mongo.config.annotation.web.http.MongoHt
@ConditionalOnMissingBean(SessionRepository.class) @ConditionalOnMissingBean(SessionRepository.class)
@ConditionalOnBean(MongoOperations.class) @ConditionalOnBean(MongoOperations.class)
@EnableConfigurationProperties(MongoSessionProperties.class) @EnableConfigurationProperties(MongoSessionProperties.class)
class MongoSessionConfiguration {
@Configuration(proxyBeanMethods = false)
@Import(MongoHttpSessionConfiguration.class) @Import(MongoHttpSessionConfiguration.class)
static class SpringBootMongoHttpSessionConfiguration { class MongoSessionConfiguration {
@Bean @Bean
SessionRepositoryCustomizer<MongoIndexedSessionRepository> springBootSessionRepositoryCustomizer( SessionRepositoryCustomizer<MongoIndexedSessionRepository> springBootSessionRepositoryCustomizer(
@ -55,13 +52,10 @@ class MongoSessionConfiguration {
ServerProperties serverProperties) { ServerProperties serverProperties) {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
return (sessionRepository) -> { return (sessionRepository) -> {
map.from(sessionProperties map.from(sessionProperties.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
.to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds())); .to((timeout) -> sessionRepository.setMaxInactiveIntervalInSeconds((int) timeout.getSeconds()));
map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName); map.from(mongoSessionProperties::getCollectionName).to(sessionRepository::setCollectionName);
}; };
} }
} }
}

View File

@ -43,11 +43,8 @@ import org.springframework.session.data.redis.config.annotation.web.server.Redis
@ConditionalOnMissingBean(ReactiveSessionRepository.class) @ConditionalOnMissingBean(ReactiveSessionRepository.class)
@ConditionalOnBean(ReactiveRedisConnectionFactory.class) @ConditionalOnBean(ReactiveRedisConnectionFactory.class)
@EnableConfigurationProperties(RedisSessionProperties.class) @EnableConfigurationProperties(RedisSessionProperties.class)
class RedisReactiveSessionConfiguration {
@Configuration(proxyBeanMethods = false)
@Import(RedisWebSessionConfiguration.class) @Import(RedisWebSessionConfiguration.class)
static class SpringBootRedisWebSessionConfiguration { class RedisReactiveSessionConfiguration {
@Bean @Bean
ReactiveSessionRepositoryCustomizer<ReactiveRedisSessionRepository> springBootSessionRepositoryCustomizer( ReactiveSessionRepositoryCustomizer<ReactiveRedisSessionRepository> springBootSessionRepositoryCustomizer(
@ -55,8 +52,7 @@ class RedisReactiveSessionConfiguration {
ServerProperties serverProperties) { ServerProperties serverProperties) {
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
return (sessionRepository) -> { return (sessionRepository) -> {
map.from(sessionProperties map.from(sessionProperties.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
.determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout()))
.to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds())); .to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace); map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode); map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
@ -64,5 +60,3 @@ class RedisReactiveSessionConfiguration {
} }
} }
}

View File

@ -57,11 +57,8 @@ class RedisSessionConfiguration {
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(prefix = "spring.session.redis", name = "repository-type", havingValue = "default", @ConditionalOnProperty(prefix = "spring.session.redis", name = "repository-type", havingValue = "default",
matchIfMissing = true) matchIfMissing = true)
static class DefaultRedisSessionConfiguration {
@Configuration(proxyBeanMethods = false)
@Import(RedisHttpSessionConfiguration.class) @Import(RedisHttpSessionConfiguration.class)
static class SpringBootRedisHttpSessionConfiguration { static class DefaultRedisSessionConfiguration {
@Bean @Bean
SessionRepositoryCustomizer<RedisSessionRepository> springBootSessionRepositoryCustomizer( SessionRepositoryCustomizer<RedisSessionRepository> springBootSessionRepositoryCustomizer(
@ -69,8 +66,7 @@ class RedisSessionConfiguration {
ServerProperties serverProperties) { ServerProperties serverProperties) {
String cleanupCron = redisSessionProperties.getCleanupCron(); String cleanupCron = redisSessionProperties.getCleanupCron();
if (cleanupCron != null) { if (cleanupCron != null) {
throw new InvalidConfigurationPropertyValueException("spring.session.redis.cleanup-cron", throw new InvalidConfigurationPropertyValueException("spring.session.redis.cleanup-cron", cleanupCron,
cleanupCron,
"Cron-based cleanup is only supported when spring.session.redis.repository-type is set to " "Cron-based cleanup is only supported when spring.session.redis.repository-type is set to "
+ "indexed."); + "indexed.");
} }
@ -87,10 +83,9 @@ class RedisSessionConfiguration {
} }
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(prefix = "spring.session.redis", name = "repository-type", havingValue = "indexed") @ConditionalOnProperty(prefix = "spring.session.redis", name = "repository-type", havingValue = "indexed")
@Import(RedisIndexedHttpSessionConfiguration.class)
static class IndexedRedisSessionConfiguration { static class IndexedRedisSessionConfiguration {
@Bean @Bean
@ -102,10 +97,6 @@ class RedisSessionConfiguration {
}; };
} }
@Configuration(proxyBeanMethods = false)
@Import(RedisIndexedHttpSessionConfiguration.class)
static class SpringBootRedisIndexedHttpSessionConfiguration {
@Bean @Bean
SessionRepositoryCustomizer<RedisIndexedSessionRepository> springBootSessionRepositoryCustomizer( SessionRepositoryCustomizer<RedisIndexedSessionRepository> springBootSessionRepositoryCustomizer(
SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties, SessionProperties sessionProperties, RedisSessionProperties redisSessionProperties,
@ -114,8 +105,7 @@ class RedisSessionConfiguration {
return (sessionRepository) -> { return (sessionRepository) -> {
map.from(sessionProperties map.from(sessionProperties
.determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout())) .determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout()))
.to((timeout) -> sessionRepository .to((timeout) -> sessionRepository.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
.setDefaultMaxInactiveInterval((int) timeout.getSeconds()));
map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace); map.from(redisSessionProperties::getNamespace).to(sessionRepository::setRedisKeyNamespace);
map.from(redisSessionProperties::getFlushMode).to(sessionRepository::setFlushMode); map.from(redisSessionProperties::getFlushMode).to(sessionRepository::setFlushMode);
map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode); map.from(redisSessionProperties::getSaveMode).to(sessionRepository::setSaveMode);
@ -126,5 +116,3 @@ class RedisSessionConfiguration {
} }
} }
}