Browse Source

Auto-configuration of reactive Spring Session

pull/10824/merge
Andy Wilkinson 9 years ago
parent
commit
bdab4aa97e
  1. 28
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionAutoConfiguration.java
  2. 4
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionStoreMappings.java
  3. 16
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/HttpHandlerAutoConfiguration.java

28
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionAutoConfiguration.java

@ -23,18 +23,20 @@ import javax.annotation.PostConstruct;
import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration;
import org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration; import org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration.SessionRepositoryConfiguration; import org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration;
import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration.SessionRepositoryValidator; import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -56,15 +58,29 @@ import org.springframework.session.SessionRepository;
*/ */
@Configuration @Configuration
@ConditionalOnClass(Session.class) @ConditionalOnClass(Session.class)
@ConditionalOnWebApplication(type = Type.SERVLET) @ConditionalOnWebApplication
@EnableConfigurationProperties(SessionProperties.class) @EnableConfigurationProperties(SessionProperties.class)
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, HazelcastAutoConfiguration.class, @AutoConfigureAfter({ DataSourceAutoConfiguration.class, HazelcastAutoConfiguration.class,
JdbcTemplateAutoConfiguration.class, MongoAutoConfiguration.class, JdbcTemplateAutoConfiguration.class, MongoAutoConfiguration.class,
RedisAutoConfiguration.class }) MongoReactiveAutoConfiguration.class, RedisAutoConfiguration.class,
@Import({ SessionRepositoryConfiguration.class, SessionRepositoryValidator.class, RedisReactiveAutoConfiguration.class })
SessionRepositoryFilterConfiguration.class }) @AutoConfigureBefore(HttpHandlerAutoConfiguration.class)
public class SessionAutoConfiguration { public class SessionAutoConfiguration {
@Configuration
@ConditionalOnWebApplication(type = Type.SERVLET)
@Import({ SessionRepositoryConfiguration.class, SessionRepositoryValidator.class,
SessionRepositoryFilterConfiguration.class })
static class ServletSessionConfiguration {
}
@Configuration
@ConditionalOnWebApplication(type = Type.REACTIVE)
static class ReactiveSessionConfiguration {
}
@Configuration @Configuration
@ConditionalOnMissingBean(SessionRepository.class) @ConditionalOnMissingBean(SessionRepository.class)
@Import({ SessionRepositoryImplementationValidator.class, @Import({ SessionRepositoryImplementationValidator.class,

4
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/session/SessionStoreMappings.java

@ -45,14 +45,14 @@ final class SessionStoreMappings {
private SessionStoreMappings() { private SessionStoreMappings() {
} }
public static String getConfigurationClass(StoreType sessionStoreType) { static String getConfigurationClass(StoreType sessionStoreType) {
Class<?> configurationClass = MAPPINGS.get(sessionStoreType); Class<?> configurationClass = MAPPINGS.get(sessionStoreType);
Assert.state(configurationClass != null, Assert.state(configurationClass != null,
() -> "Unknown session store type " + sessionStoreType); () -> "Unknown session store type " + sessionStoreType);
return configurationClass.getName(); return configurationClass.getName();
} }
public static StoreType getType(String configurationClassName) { static StoreType getType(String configurationClassName) {
for (Map.Entry<StoreType, Class<?>> entry : MAPPINGS.entrySet()) { for (Map.Entry<StoreType, Class<?>> entry : MAPPINGS.entrySet()) {
if (entry.getValue().getName().equals(configurationClassName)) { if (entry.getValue().getName().equals(configurationClassName)) {
return entry.getKey(); return entry.getKey();

16
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/HttpHandlerAutoConfiguration.java

@ -16,6 +16,7 @@
package org.springframework.boot.autoconfigure.web.reactive; package org.springframework.boot.autoconfigure.web.reactive;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@ -29,12 +30,14 @@ import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.web.reactive.DispatcherHandler; import org.springframework.web.reactive.DispatcherHandler;
import org.springframework.web.server.adapter.WebHttpHandlerBuilder; import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
import org.springframework.web.server.session.WebSessionManager;
/** /**
* {@link EnableAutoConfiguration Auto-configuration} for {@link HttpHandler}. * {@link EnableAutoConfiguration Auto-configuration} for {@link HttpHandler}.
* *
* @author Brian Clozel * @author Brian Clozel
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Andy Wilkinson
* @since 2.0.0 * @since 2.0.0
*/ */
@Configuration @Configuration
@ -55,9 +58,16 @@ public class HttpHandlerAutoConfiguration {
} }
@Bean @Bean
public HttpHandler httpHandler() { public HttpHandler httpHandler(
return WebHttpHandlerBuilder.applicationContext(this.applicationContext) ObjectProvider<WebSessionManager> webSessionManagerProvider) {
.build(); WebHttpHandlerBuilder builder = WebHttpHandlerBuilder
.applicationContext(this.applicationContext);
WebSessionManager webSessionManager = webSessionManagerProvider
.getIfAvailable();
if (webSessionManager != null) {
builder.sessionManager(webSessionManager);
}
return builder.build();
} }
} }

Loading…
Cancel
Save