Ensure configuration classes can be used with @Import
This commit adds tests that verify that all Spring Session configuration classes can be used with @Import, and fixes JDBC and Hazelcast HttpSession configurations and Redis WebSession configuration.
This commit is contained in:
@@ -194,6 +194,13 @@ public class MongoHttpSessionConfigurationTest {
|
|||||||
indexResolver);
|
indexResolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void importConfigAndCustomize() {
|
||||||
|
registerAndRefresh(ImportConfigAndCustomizeConfiguration.class);
|
||||||
|
MongoIndexedSessionRepository sessionRepository = this.context.getBean(MongoIndexedSessionRepository.class);
|
||||||
|
assertThat(sessionRepository).extracting("maxInactiveIntervalInSeconds").isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
||||||
|
|
||||||
this.context.register(annotatedClasses);
|
this.context.register(annotatedClasses);
|
||||||
@@ -333,4 +340,15 @@ public class MongoHttpSessionConfigurationTest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@Import(MongoHttpSessionConfiguration.class)
|
||||||
|
static class ImportConfigAndCustomizeConfiguration extends BaseConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
SessionRepositoryCustomizer<MongoIndexedSessionRepository> sessionRepositoryCustomizer() {
|
||||||
|
return (sessionRepository) -> sessionRepository.setMaxInactiveIntervalInSeconds(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.springframework.beans.factory.UnsatisfiedDependencyException;
|
|||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.data.mongodb.core.MongoOperations;
|
import org.springframework.data.mongodb.core.MongoOperations;
|
||||||
import org.springframework.data.mongodb.core.ReactiveMongoOperations;
|
import org.springframework.data.mongodb.core.ReactiveMongoOperations;
|
||||||
import org.springframework.data.mongodb.core.index.IndexOperations;
|
import org.springframework.data.mongodb.core.index.IndexOperations;
|
||||||
@@ -220,6 +221,15 @@ public class ReactiveMongoWebSessionConfigurationTest {
|
|||||||
indexResolver);
|
indexResolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void importConfigAndCustomize() {
|
||||||
|
this.context = new AnnotationConfigApplicationContext();
|
||||||
|
this.context.register(ImportConfigAndCustomizeConfiguration.class);
|
||||||
|
this.context.refresh();
|
||||||
|
ReactiveMongoSessionRepository sessionRepository = this.context.getBean(ReactiveMongoSessionRepository.class);
|
||||||
|
assertThat(sessionRepository).extracting("maxInactiveIntervalInSeconds").isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reflectively extract the {@link AbstractMongoSessionConverter} from the
|
* Reflectively extract the {@link AbstractMongoSessionConverter} from the
|
||||||
* {@link ReactiveMongoSessionRepository}. This is to avoid expanding the surface area
|
* {@link ReactiveMongoSessionRepository}. This is to avoid expanding the surface area
|
||||||
@@ -393,4 +403,20 @@ public class ReactiveMongoWebSessionConfigurationTest {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@Import(ReactiveMongoWebSessionConfiguration.class)
|
||||||
|
static class ImportConfigAndCustomizeConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
ReactiveMongoOperations operations() {
|
||||||
|
return mock(ReactiveMongoOperations.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
ReactiveSessionRepositoryCustomizer<ReactiveMongoSessionRepository> sessionRepositoryCustomizer() {
|
||||||
|
return (sessionRepository) -> sessionRepository.setMaxInactiveIntervalInSeconds(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,6 +140,9 @@ public class RedisWebSessionConfiguration extends SpringWebSessionConfiguration
|
|||||||
Map<String, Object> attributeMap = importMetadata
|
Map<String, Object> attributeMap = importMetadata
|
||||||
.getAnnotationAttributes(EnableRedisWebSession.class.getName());
|
.getAnnotationAttributes(EnableRedisWebSession.class.getName());
|
||||||
AnnotationAttributes attributes = AnnotationAttributes.fromMap(attributeMap);
|
AnnotationAttributes attributes = AnnotationAttributes.fromMap(attributeMap);
|
||||||
|
if (attributes == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.maxInactiveIntervalInSeconds = attributes.getNumber("maxInactiveIntervalInSeconds");
|
this.maxInactiveIntervalInSeconds = attributes.getNumber("maxInactiveIntervalInSeconds");
|
||||||
String redisNamespaceValue = attributes.getString("redisNamespace");
|
String redisNamespaceValue = attributes.getString("redisNamespace");
|
||||||
if (StringUtils.hasText(redisNamespaceValue)) {
|
if (StringUtils.hasText(redisNamespaceValue)) {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.springframework.beans.factory.BeanCreationException;
|
|||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
@@ -198,6 +199,13 @@ class RedisHttpsSessionConfigurationTests {
|
|||||||
Duration.ofSeconds(MAX_INACTIVE_INTERVAL_IN_SECONDS));
|
Duration.ofSeconds(MAX_INACTIVE_INTERVAL_IN_SECONDS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void importConfigAndCustomize() {
|
||||||
|
registerAndRefresh(RedisConfig.class, ImportConfigAndCustomizeConfiguration.class);
|
||||||
|
RedisSessionRepository sessionRepository = this.context.getBean(RedisSessionRepository.class);
|
||||||
|
assertThat(sessionRepository).extracting("defaultMaxInactiveInterval").isEqualTo(Duration.ZERO);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
||||||
this.context.register(annotatedClasses);
|
this.context.register(annotatedClasses);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
@@ -362,4 +370,15 @@ class RedisHttpsSessionConfigurationTests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@Import(RedisHttpSessionConfiguration.class)
|
||||||
|
static class ImportConfigAndCustomizeConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
SessionRepositoryCustomizer<RedisSessionRepository> sessionRepositoryCustomizer() {
|
||||||
|
return (sessionRepository) -> sessionRepository.setDefaultMaxInactiveInterval(Duration.ZERO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.springframework.beans.factory.BeanCreationException;
|
|||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
@@ -231,6 +232,13 @@ class RedisIndexedHttpSessionConfigurationTests {
|
|||||||
MAX_INACTIVE_INTERVAL_IN_SECONDS);
|
MAX_INACTIVE_INTERVAL_IN_SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void importConfigAndCustomize() {
|
||||||
|
registerAndRefresh(RedisConfig.class, ImportConfigAndCustomizeConfiguration.class);
|
||||||
|
RedisIndexedSessionRepository sessionRepository = this.context.getBean(RedisIndexedSessionRepository.class);
|
||||||
|
assertThat(sessionRepository).extracting("defaultMaxInactiveInterval").isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
||||||
this.context.register(annotatedClasses);
|
this.context.register(annotatedClasses);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
@@ -424,4 +432,15 @@ class RedisIndexedHttpSessionConfigurationTests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@Import(RedisIndexedHttpSessionConfiguration.class)
|
||||||
|
static class ImportConfigAndCustomizeConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
SessionRepositoryCustomizer<RedisIndexedSessionRepository> sessionRepositoryCustomizer() {
|
||||||
|
return (sessionRepository) -> sessionRepository.setDefaultMaxInactiveInterval(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
|||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
|
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
|
||||||
@@ -225,6 +226,13 @@ class RedisWebSessionConfigurationTests {
|
|||||||
MAX_INACTIVE_INTERVAL_IN_SECONDS);
|
MAX_INACTIVE_INTERVAL_IN_SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void importConfigAndCustomize() {
|
||||||
|
registerAndRefresh(RedisConfig.class, ImportConfigAndCustomizeConfiguration.class);
|
||||||
|
ReactiveRedisSessionRepository sessionRepository = this.context.getBean(ReactiveRedisSessionRepository.class);
|
||||||
|
assertThat(sessionRepository).extracting("defaultMaxInactiveInterval").isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
||||||
this.context.register(annotatedClasses);
|
this.context.register(annotatedClasses);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
@@ -381,4 +389,15 @@ class RedisWebSessionConfigurationTests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@Import(RedisWebSessionConfiguration.class)
|
||||||
|
static class ImportConfigAndCustomizeConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
ReactiveSessionRepositoryCustomizer<ReactiveRedisSessionRepository> sessionRepositoryCustomizer() {
|
||||||
|
return (sessionRepository) -> sessionRepository.setDefaultMaxInactiveInterval(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,6 +125,9 @@ public class HazelcastHttpSessionConfiguration extends SpringHttpSessionConfigur
|
|||||||
Map<String, Object> attributeMap = importMetadata
|
Map<String, Object> attributeMap = importMetadata
|
||||||
.getAnnotationAttributes(EnableHazelcastHttpSession.class.getName());
|
.getAnnotationAttributes(EnableHazelcastHttpSession.class.getName());
|
||||||
AnnotationAttributes attributes = AnnotationAttributes.fromMap(attributeMap);
|
AnnotationAttributes attributes = AnnotationAttributes.fromMap(attributeMap);
|
||||||
|
if (attributes == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.maxInactiveIntervalInSeconds = attributes.getNumber("maxInactiveIntervalInSeconds");
|
this.maxInactiveIntervalInSeconds = attributes.getNumber("maxInactiveIntervalInSeconds");
|
||||||
String sessionMapNameValue = attributes.getString("sessionMapName");
|
String sessionMapNameValue = attributes.getString("sessionMapName");
|
||||||
if (StringUtils.hasText(sessionMapNameValue)) {
|
if (StringUtils.hasText(sessionMapNameValue)) {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
|||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.session.FlushMode;
|
import org.springframework.session.FlushMode;
|
||||||
@@ -230,6 +231,14 @@ class HazelcastHttpSessionConfigurationTests {
|
|||||||
MAX_INACTIVE_INTERVAL_IN_SECONDS);
|
MAX_INACTIVE_INTERVAL_IN_SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void importConfigAndCustomize() {
|
||||||
|
registerAndRefresh(ImportConfigAndCustomizeConfiguration.class);
|
||||||
|
HazelcastIndexedSessionRepository sessionRepository = this.context
|
||||||
|
.getBean(HazelcastIndexedSessionRepository.class);
|
||||||
|
assertThat(sessionRepository).extracting("defaultMaxInactiveInterval").isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
||||||
this.context.register(annotatedClasses);
|
this.context.register(annotatedClasses);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
@@ -446,4 +455,15 @@ class HazelcastHttpSessionConfigurationTests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@Import(HazelcastHttpSessionConfiguration.class)
|
||||||
|
static class ImportConfigAndCustomizeConfiguration extends BaseConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
SessionRepositoryCustomizer<HazelcastIndexedSessionRepository> sessionRepositoryCustomizer() {
|
||||||
|
return (sessionRepository) -> sessionRepository.setDefaultMaxInactiveInterval(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,6 +243,9 @@ public class JdbcHttpSessionConfiguration extends SpringHttpSessionConfiguration
|
|||||||
Map<String, Object> attributeMap = importMetadata
|
Map<String, Object> attributeMap = importMetadata
|
||||||
.getAnnotationAttributes(EnableJdbcHttpSession.class.getName());
|
.getAnnotationAttributes(EnableJdbcHttpSession.class.getName());
|
||||||
AnnotationAttributes attributes = AnnotationAttributes.fromMap(attributeMap);
|
AnnotationAttributes attributes = AnnotationAttributes.fromMap(attributeMap);
|
||||||
|
if (attributes == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.maxInactiveIntervalInSeconds = attributes.getNumber("maxInactiveIntervalInSeconds");
|
this.maxInactiveIntervalInSeconds = attributes.getNumber("maxInactiveIntervalInSeconds");
|
||||||
String tableNameValue = attributes.getString("tableName");
|
String tableNameValue = attributes.getString("tableName");
|
||||||
if (StringUtils.hasText(tableNameValue)) {
|
if (StringUtils.hasText(tableNameValue)) {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
|||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
@@ -310,6 +311,13 @@ class JdbcHttpSessionConfigurationTests {
|
|||||||
assertThat(jdbcTemplate.getExceptionTranslator()).isInstanceOf(SQLErrorCodeSQLExceptionTranslator.class);
|
assertThat(jdbcTemplate.getExceptionTranslator()).isInstanceOf(SQLErrorCodeSQLExceptionTranslator.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void importConfigAndCustomize() {
|
||||||
|
registerAndRefresh(DataSourceConfiguration.class, ImportConfigAndCustomizeConfiguration.class);
|
||||||
|
JdbcIndexedSessionRepository sessionRepository = this.context.getBean(JdbcIndexedSessionRepository.class);
|
||||||
|
assertThat(sessionRepository).extracting("defaultMaxInactiveInterval").isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
private void registerAndRefresh(Class<?>... annotatedClasses) {
|
||||||
this.context.register(annotatedClasses);
|
this.context.register(annotatedClasses);
|
||||||
this.context.refresh();
|
this.context.refresh();
|
||||||
@@ -556,4 +564,15 @@ class JdbcHttpSessionConfigurationTests {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration(proxyBeanMethods = false)
|
||||||
|
@Import(JdbcHttpSessionConfiguration.class)
|
||||||
|
static class ImportConfigAndCustomizeConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
SessionRepositoryCustomizer<JdbcIndexedSessionRepository> sessionRepositoryCustomizer() {
|
||||||
|
return (sessionRepository) -> sessionRepository.setDefaultMaxInactiveInterval(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user