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.JDBC, JdbcSessionConfiguration.class);
 | 
			
		||||
		mappings.put(StoreType.HAZELCAST, HazelcastSessionConfiguration.class);
 | 
			
		||||
		mappings.put(StoreType.HASH_MAP, HashMapSessionConfiguration.class);
 | 
			
		||||
		mappings.put(StoreType.NONE, NoOpSessionConfiguration.class);
 | 
			
		||||
		MAPPINGS = Collections.unmodifiableMap(mappings);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,11 +41,6 @@ public enum StoreType {
 | 
			
		|||
	 */
 | 
			
		||||
	HAZELCAST,
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Simple in-memory map of sessions.
 | 
			
		||||
	 */
 | 
			
		||||
	HASH_MAP,
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * 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.JdbcTemplateAutoConfiguration;
 | 
			
		||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
 | 
			
		||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
 | 
			
		||||
import org.springframework.jdbc.BadSqlGrammarException;
 | 
			
		||||
import org.springframework.jdbc.core.JdbcOperations;
 | 
			
		||||
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
 | 
			
		||||
	public void disableDatabaseInitializer() {
 | 
			
		||||
		this.contextRunner.withPropertyValues(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,6 @@ import org.junit.Test;
 | 
			
		|||
 | 
			
		||||
import org.springframework.beans.factory.BeanCreationException;
 | 
			
		||||
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.web.servlet.FilterRegistrationBean;
 | 
			
		||||
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
 | 
			
		||||
	public void springSessionTimeoutIsNotAValidProperty() {
 | 
			
		||||
		this.contextRunner.withPropertyValues("spring.session.store-type=hash-map",
 | 
			
		||||
		this.contextRunner.withPropertyValues(
 | 
			
		||||
				"spring.session.timeout=3000").run((context) -> {
 | 
			
		||||
			assertThat(context).hasFailed();
 | 
			
		||||
			assertThat(context).getFailure().isInstanceOf(BeanCreationException.class);
 | 
			
		||||
| 
						 | 
				
			
			@ -127,8 +104,8 @@ public class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurat
 | 
			
		|||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	@Test
 | 
			
		||||
	public void filterIsRegisteredWithAsyncErrorAndRequestDispatcherTypes() {
 | 
			
		||||
		this.contextRunner.withPropertyValues(
 | 
			
		||||
				"spring.session.store-type=hash-map").run((context) -> {
 | 
			
		||||
		this.contextRunner.withUserConfiguration(
 | 
			
		||||
				SessionRepositoryConfiguration.class).run((context) -> {
 | 
			
		||||
			FilterRegistrationBean<?> registration = context
 | 
			
		||||
					.getBean(FilterRegistrationBean.class);
 | 
			
		||||
			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
 | 
			
		||||
	public void filterOrderCanBeCustomizedWithCustomStore() {
 | 
			
		||||
		this.contextRunner.withUserConfiguration(SessionRepositoryConfiguration.class)
 | 
			
		||||
| 
						 | 
				
			
			@ -163,8 +130,8 @@ public class SessionAutoConfigurationTests extends AbstractSessionAutoConfigurat
 | 
			
		|||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	@Test
 | 
			
		||||
	public void filterDispatcherTypesCanBeCustomized() {
 | 
			
		||||
		this.contextRunner.withPropertyValues("spring.session.store-type=hash-map",
 | 
			
		||||
				"spring.session.servlet.filter-dispatcher-types=error, request")
 | 
			
		||||
		this.contextRunner.withUserConfiguration(SessionRepositoryConfiguration.class)
 | 
			
		||||
				.withPropertyValues("spring.session.servlet.filter-dispatcher-types=error, request")
 | 
			
		||||
				.run((context) -> {
 | 
			
		||||
					FilterRegistrationBean<?> registration = context
 | 
			
		||||
							.getBean(FilterRegistrationBean.class);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.web.servlet;
 | 
			
		|||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
 | 
			
		||||
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.security.SecurityAutoConfiguration;
 | 
			
		||||
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.web.server.WebServerFactoryCustomizerBeanPostProcessor;
 | 
			
		||||
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.RedisConnectionFactory;
 | 
			
		||||
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 static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
| 
						 | 
				
			
			@ -84,10 +86,10 @@ public class FilterOrderingIntegrationTests {
 | 
			
		|||
 | 
			
		||||
	private void load() {
 | 
			
		||||
		this.context = new AnnotationConfigServletWebServerApplicationContext();
 | 
			
		||||
		TestPropertyValues.of("spring.session.store-type=hash-map").applyTo(this.context);
 | 
			
		||||
		this.context.register(MockWebServerConfiguration.class,
 | 
			
		||||
				TestRedisConfiguration.class, WebMvcAutoConfiguration.class,
 | 
			
		||||
				SecurityAutoConfiguration.class, SessionAutoConfiguration.class,
 | 
			
		||||
				TestSessionConfiguration.class, TestRedisConfiguration.class,
 | 
			
		||||
				WebMvcAutoConfiguration.class, SecurityAutoConfiguration.class,
 | 
			
		||||
				SessionAutoConfiguration.class,
 | 
			
		||||
				HttpMessageConvertersAutoConfiguration.class,
 | 
			
		||||
				PropertyPlaceholderAutoConfiguration.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
 | 
			
		||||
	static class TestRedisConfiguration {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5597,7 +5597,6 @@ Spring Boot provides Spring Session auto-configuration for a wide range of store
 | 
			
		|||
* JDBC
 | 
			
		||||
* Redis
 | 
			
		||||
* Hazelcast
 | 
			
		||||
* HashMap
 | 
			
		||||
 | 
			
		||||
If Spring Session is available, you must choose the
 | 
			
		||||
{sc-spring-boot-autoconfigure}/session/StoreType.{sc-ext}[`StoreType`] that you wish to
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue