Remove auto-configuration for MapSessionRepository
This commit removes auto-configuration for Spring Session's simple in memory support. Closes gh-10253
This commit is contained in:
		
							parent
							
								
									93245a8297
								
							
						
					
					
						commit
						1cd3b0cabe
					
				| 
						 | 
					@ -1,50 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Copyright 2012-2017 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.
 | 
					 | 
				
			||||||
 * You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
 * See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
 * limitations under the License.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package org.springframework.boot.autoconfigure.session;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 | 
					 | 
				
			||||||
import org.springframework.context.annotation.Bean;
 | 
					 | 
				
			||||||
import org.springframework.context.annotation.Conditional;
 | 
					 | 
				
			||||||
import org.springframework.context.annotation.Configuration;
 | 
					 | 
				
			||||||
import org.springframework.session.MapSessionRepository;
 | 
					 | 
				
			||||||
import org.springframework.session.SessionRepository;
 | 
					 | 
				
			||||||
import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * HashMap based session configuration, intended as a fallback.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @author Tommy Ludwig
 | 
					 | 
				
			||||||
 * @author Stephane Nicoll
 | 
					 | 
				
			||||||
 * @author Vedran Pavic
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
@Configuration
 | 
					 | 
				
			||||||
@EnableSpringHttpSession
 | 
					 | 
				
			||||||
@Conditional(SessionCondition.class)
 | 
					 | 
				
			||||||
@ConditionalOnMissingBean(SessionRepository.class)
 | 
					 | 
				
			||||||
class HashMapSessionConfiguration {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Bean
 | 
					 | 
				
			||||||
	public MapSessionRepository sessionRepository(SessionProperties properties) {
 | 
					 | 
				
			||||||
		MapSessionRepository repository = new MapSessionRepository();
 | 
					 | 
				
			||||||
		Integer timeout = properties.getTimeout();
 | 
					 | 
				
			||||||
		if (timeout != null) {
 | 
					 | 
				
			||||||
			repository.setDefaultMaxInactiveInterval(timeout);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return repository;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,6 @@ final class SessionStoreMappings {
 | 
				
			||||||
		mappings.put(StoreType.REDIS, RedisSessionConfiguration.class);
 | 
							mappings.put(StoreType.REDIS, RedisSessionConfiguration.class);
 | 
				
			||||||
		mappings.put(StoreType.JDBC, JdbcSessionConfiguration.class);
 | 
							mappings.put(StoreType.JDBC, JdbcSessionConfiguration.class);
 | 
				
			||||||
		mappings.put(StoreType.HAZELCAST, HazelcastSessionConfiguration.class);
 | 
							mappings.put(StoreType.HAZELCAST, HazelcastSessionConfiguration.class);
 | 
				
			||||||
		mappings.put(StoreType.HASH_MAP, HashMapSessionConfiguration.class);
 | 
					 | 
				
			||||||
		mappings.put(StoreType.NONE, NoOpSessionConfiguration.class);
 | 
							mappings.put(StoreType.NONE, NoOpSessionConfiguration.class);
 | 
				
			||||||
		MAPPINGS = Collections.unmodifiableMap(mappings);
 | 
							MAPPINGS = Collections.unmodifiableMap(mappings);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,11 +41,6 @@ public enum StoreType {
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	HAZELCAST,
 | 
						HAZELCAST,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Simple in-memory map of sessions.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	HASH_MAP,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * No session data-store.
 | 
						 * No session data-store.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
 | 
					import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
 | 
				
			||||||
 | 
					import org.springframework.boot.web.servlet.FilterRegistrationBean;
 | 
				
			||||||
import org.springframework.jdbc.BadSqlGrammarException;
 | 
					import org.springframework.jdbc.BadSqlGrammarException;
 | 
				
			||||||
import org.springframework.jdbc.core.JdbcOperations;
 | 
					import org.springframework.jdbc.core.JdbcOperations;
 | 
				
			||||||
import org.springframework.session.jdbc.JdbcOperationsSessionRepository;
 | 
					import org.springframework.session.jdbc.JdbcOperationsSessionRepository;
 | 
				
			||||||
| 
						 | 
					@ -67,6 +68,16 @@ public class SessionAutoConfigurationJdbcTests
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						public void filterOrderCanBeCustomized() {
 | 
				
			||||||
 | 
							this.contextRunner.withPropertyValues("spring.session.store-type=jdbc",
 | 
				
			||||||
 | 
											"spring.session.servlet.filter-order=123").run((context) -> {
 | 
				
			||||||
 | 
								FilterRegistrationBean<?> registration = context
 | 
				
			||||||
 | 
										.getBean(FilterRegistrationBean.class);
 | 
				
			||||||
 | 
								assertThat(registration.getOrder()).isEqualTo(123);
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void disableDatabaseInitializer() {
 | 
						public void disableDatabaseInitializer() {
 | 
				
			||||||
		this.contextRunner.withPropertyValues(
 | 
							this.contextRunner.withPropertyValues(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,6 @@ import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.beans.factory.BeanCreationException;
 | 
					import org.springframework.beans.factory.BeanCreationException;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
					import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.web.ServerProperties;
 | 
					 | 
				
			||||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
 | 
					import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
 | 
				
			||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
 | 
					import org.springframework.boot.web.servlet.FilterRegistrationBean;
 | 
				
			||||||
import org.springframework.context.annotation.Bean;
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
| 
						 | 
					@ -92,31 +91,9 @@ public class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurat
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
					 | 
				
			||||||
	public void hashMapSessionStore() {
 | 
					 | 
				
			||||||
		this.contextRunner
 | 
					 | 
				
			||||||
				.withPropertyValues("spring.session.store-type=hash-map")
 | 
					 | 
				
			||||||
				.run((context) -> {
 | 
					 | 
				
			||||||
					MapSessionRepository repository = validateSessionRepository(context,
 | 
					 | 
				
			||||||
							MapSessionRepository.class);
 | 
					 | 
				
			||||||
					assertThat(getSessionTimeout(repository)).isNull();
 | 
					 | 
				
			||||||
				});
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Test
 | 
					 | 
				
			||||||
	public void hashMapSessionStoreCustomTimeout() {
 | 
					 | 
				
			||||||
		this.contextRunner.withUserConfiguration(ServerProperties.class).
 | 
					 | 
				
			||||||
				withPropertyValues("spring.session.store-type=hash-map",
 | 
					 | 
				
			||||||
						"server.session.timeout=3000").run((context) -> {
 | 
					 | 
				
			||||||
			MapSessionRepository repository = validateSessionRepository(context,
 | 
					 | 
				
			||||||
					MapSessionRepository.class);
 | 
					 | 
				
			||||||
			assertThat(getSessionTimeout(repository)).isEqualTo(3000);
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void springSessionTimeoutIsNotAValidProperty() {
 | 
						public void springSessionTimeoutIsNotAValidProperty() {
 | 
				
			||||||
		this.contextRunner.withPropertyValues("spring.session.store-type=hash-map",
 | 
							this.contextRunner.withPropertyValues(
 | 
				
			||||||
				"spring.session.timeout=3000").run((context) -> {
 | 
									"spring.session.timeout=3000").run((context) -> {
 | 
				
			||||||
			assertThat(context).hasFailed();
 | 
								assertThat(context).hasFailed();
 | 
				
			||||||
			assertThat(context).getFailure().isInstanceOf(BeanCreationException.class);
 | 
								assertThat(context).getFailure().isInstanceOf(BeanCreationException.class);
 | 
				
			||||||
| 
						 | 
					@ -127,8 +104,8 @@ public class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurat
 | 
				
			||||||
	@SuppressWarnings("unchecked")
 | 
						@SuppressWarnings("unchecked")
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void filterIsRegisteredWithAsyncErrorAndRequestDispatcherTypes() {
 | 
						public void filterIsRegisteredWithAsyncErrorAndRequestDispatcherTypes() {
 | 
				
			||||||
		this.contextRunner.withPropertyValues(
 | 
							this.contextRunner.withUserConfiguration(
 | 
				
			||||||
				"spring.session.store-type=hash-map").run((context) -> {
 | 
									SessionRepositoryConfiguration.class).run((context) -> {
 | 
				
			||||||
			FilterRegistrationBean<?> registration = context
 | 
								FilterRegistrationBean<?> registration = context
 | 
				
			||||||
					.getBean(FilterRegistrationBean.class);
 | 
										.getBean(FilterRegistrationBean.class);
 | 
				
			||||||
			assertThat(registration.getFilter())
 | 
								assertThat(registration.getFilter())
 | 
				
			||||||
| 
						 | 
					@ -139,16 +116,6 @@ public class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurat
 | 
				
			||||||
		});
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Test
 | 
					 | 
				
			||||||
	public void filterOrderCanBeCustomized() {
 | 
					 | 
				
			||||||
		this.contextRunner.withPropertyValues("spring.session.store-type=hash-map",
 | 
					 | 
				
			||||||
				"spring.session.servlet.filter-order=123").run((context) -> {
 | 
					 | 
				
			||||||
			FilterRegistrationBean<?> registration = context
 | 
					 | 
				
			||||||
					.getBean(FilterRegistrationBean.class);
 | 
					 | 
				
			||||||
			assertThat(registration.getOrder()).isEqualTo(123);
 | 
					 | 
				
			||||||
		});
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void filterOrderCanBeCustomizedWithCustomStore() {
 | 
						public void filterOrderCanBeCustomizedWithCustomStore() {
 | 
				
			||||||
		this.contextRunner.withUserConfiguration(SessionRepositoryConfiguration.class)
 | 
							this.contextRunner.withUserConfiguration(SessionRepositoryConfiguration.class)
 | 
				
			||||||
| 
						 | 
					@ -163,8 +130,8 @@ public class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurat
 | 
				
			||||||
	@SuppressWarnings("unchecked")
 | 
						@SuppressWarnings("unchecked")
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void filterDispatcherTypesCanBeCustomized() {
 | 
						public void filterDispatcherTypesCanBeCustomized() {
 | 
				
			||||||
		this.contextRunner.withPropertyValues("spring.session.store-type=hash-map",
 | 
							this.contextRunner.withUserConfiguration(SessionRepositoryConfiguration.class)
 | 
				
			||||||
				"spring.session.servlet.filter-dispatcher-types=error, request")
 | 
									.withPropertyValues("spring.session.servlet.filter-dispatcher-types=error, request")
 | 
				
			||||||
				.run((context) -> {
 | 
									.run((context) -> {
 | 
				
			||||||
					FilterRegistrationBean<?> registration = context
 | 
										FilterRegistrationBean<?> registration = context
 | 
				
			||||||
							.getBean(FilterRegistrationBean.class);
 | 
												.getBean(FilterRegistrationBean.class);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.web.servlet;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Iterator;
 | 
					import java.util.Iterator;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.concurrent.ConcurrentHashMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.servlet.Filter;
 | 
					import javax.servlet.Filter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +30,6 @@ import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoCon
 | 
				
			||||||
import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration;
 | 
					import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration;
 | 
				
			||||||
import org.springframework.boot.test.util.TestPropertyValues;
 | 
					 | 
				
			||||||
import org.springframework.boot.testsupport.web.servlet.MockServletWebServer.RegisteredFilter;
 | 
					import org.springframework.boot.testsupport.web.servlet.MockServletWebServer.RegisteredFilter;
 | 
				
			||||||
import org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor;
 | 
					import org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor;
 | 
				
			||||||
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
 | 
					import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,8 @@ import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
import org.springframework.data.redis.connection.RedisConnection;
 | 
					import org.springframework.data.redis.connection.RedisConnection;
 | 
				
			||||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
 | 
					import org.springframework.data.redis.connection.RedisConnectionFactory;
 | 
				
			||||||
import org.springframework.security.web.FilterChainProxy;
 | 
					import org.springframework.security.web.FilterChainProxy;
 | 
				
			||||||
 | 
					import org.springframework.session.MapSessionRepository;
 | 
				
			||||||
 | 
					import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;
 | 
				
			||||||
import org.springframework.session.web.http.SessionRepositoryFilter;
 | 
					import org.springframework.session.web.http.SessionRepositoryFilter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.assertj.core.api.Assertions.assertThat;
 | 
					import static org.assertj.core.api.Assertions.assertThat;
 | 
				
			||||||
| 
						 | 
					@ -84,10 +86,10 @@ public class FilterOrderingIntegrationTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void load() {
 | 
						private void load() {
 | 
				
			||||||
		this.context = new AnnotationConfigServletWebServerApplicationContext();
 | 
							this.context = new AnnotationConfigServletWebServerApplicationContext();
 | 
				
			||||||
		TestPropertyValues.of("spring.session.store-type=hash-map").applyTo(this.context);
 | 
					 | 
				
			||||||
		this.context.register(MockWebServerConfiguration.class,
 | 
							this.context.register(MockWebServerConfiguration.class,
 | 
				
			||||||
				TestRedisConfiguration.class, WebMvcAutoConfiguration.class,
 | 
									TestSessionConfiguration.class, TestRedisConfiguration.class,
 | 
				
			||||||
				SecurityAutoConfiguration.class, SessionAutoConfiguration.class,
 | 
									WebMvcAutoConfiguration.class, SecurityAutoConfiguration.class,
 | 
				
			||||||
 | 
									SessionAutoConfiguration.class,
 | 
				
			||||||
				HttpMessageConvertersAutoConfiguration.class,
 | 
									HttpMessageConvertersAutoConfiguration.class,
 | 
				
			||||||
				PropertyPlaceholderAutoConfiguration.class,
 | 
									PropertyPlaceholderAutoConfiguration.class,
 | 
				
			||||||
				HttpEncodingAutoConfiguration.class);
 | 
									HttpEncodingAutoConfiguration.class);
 | 
				
			||||||
| 
						 | 
					@ -109,6 +111,17 @@ public class FilterOrderingIntegrationTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Configuration
 | 
				
			||||||
 | 
						@EnableSpringHttpSession
 | 
				
			||||||
 | 
						static class TestSessionConfiguration {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							@Bean
 | 
				
			||||||
 | 
							public MapSessionRepository mapSessionRepository() {
 | 
				
			||||||
 | 
								return new MapSessionRepository(new ConcurrentHashMap<>());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Configuration
 | 
						@Configuration
 | 
				
			||||||
	static class TestRedisConfiguration {
 | 
						static class TestRedisConfiguration {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5597,7 +5597,6 @@ Spring Boot provides Spring Session auto-configuration for a wide range of store
 | 
				
			||||||
* JDBC
 | 
					* JDBC
 | 
				
			||||||
* Redis
 | 
					* Redis
 | 
				
			||||||
* Hazelcast
 | 
					* Hazelcast
 | 
				
			||||||
* HashMap
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
If Spring Session is available, you must choose the
 | 
					If Spring Session is available, you must choose the
 | 
				
			||||||
{sc-spring-boot-autoconfigure}/session/StoreType.{sc-ext}[`StoreType`] that you wish to
 | 
					{sc-spring-boot-autoconfigure}/session/StoreType.{sc-ext}[`StoreType`] that you wish to
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue