Auto-configuration of reactive Spring Session
This commit is contained in:
parent
3d820adb4d
commit
bdab4aa97e
|
@ -23,18 +23,20 @@ import javax.annotation.PostConstruct;
|
|||
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
|
||||
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.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration.SessionRepositoryConfiguration;
|
||||
import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration.SessionRepositoryValidator;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
@ -56,15 +58,29 @@ import org.springframework.session.SessionRepository;
|
|||
*/
|
||||
@Configuration
|
||||
@ConditionalOnClass(Session.class)
|
||||
@ConditionalOnWebApplication(type = Type.SERVLET)
|
||||
@ConditionalOnWebApplication
|
||||
@EnableConfigurationProperties(SessionProperties.class)
|
||||
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, HazelcastAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class, MongoAutoConfiguration.class,
|
||||
RedisAutoConfiguration.class })
|
||||
@Import({ SessionRepositoryConfiguration.class, SessionRepositoryValidator.class,
|
||||
SessionRepositoryFilterConfiguration.class })
|
||||
MongoReactiveAutoConfiguration.class, RedisAutoConfiguration.class,
|
||||
RedisReactiveAutoConfiguration.class })
|
||||
@AutoConfigureBefore(HttpHandlerAutoConfiguration.class)
|
||||
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
|
||||
@ConditionalOnMissingBean(SessionRepository.class)
|
||||
@Import({ SessionRepositoryImplementationValidator.class,
|
||||
|
|
|
@ -45,14 +45,14 @@ final class SessionStoreMappings {
|
|||
private SessionStoreMappings() {
|
||||
}
|
||||
|
||||
public static String getConfigurationClass(StoreType sessionStoreType) {
|
||||
static String getConfigurationClass(StoreType sessionStoreType) {
|
||||
Class<?> configurationClass = MAPPINGS.get(sessionStoreType);
|
||||
Assert.state(configurationClass != null,
|
||||
() -> "Unknown session store type " + sessionStoreType);
|
||||
return configurationClass.getName();
|
||||
}
|
||||
|
||||
public static StoreType getType(String configurationClassName) {
|
||||
static StoreType getType(String configurationClassName) {
|
||||
for (Map.Entry<StoreType, Class<?>> entry : MAPPINGS.entrySet()) {
|
||||
if (entry.getValue().getName().equals(configurationClassName)) {
|
||||
return entry.getKey();
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package org.springframework.boot.autoconfigure.web.reactive;
|
||||
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
|
||||
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.web.reactive.DispatcherHandler;
|
||||
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
|
||||
import org.springframework.web.server.session.WebSessionManager;
|
||||
|
||||
/**
|
||||
* {@link EnableAutoConfiguration Auto-configuration} for {@link HttpHandler}.
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @author Stephane Nicoll
|
||||
* @author Andy Wilkinson
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@Configuration
|
||||
|
@ -55,9 +58,16 @@ public class HttpHandlerAutoConfiguration {
|
|||
}
|
||||
|
||||
@Bean
|
||||
public HttpHandler httpHandler() {
|
||||
return WebHttpHandlerBuilder.applicationContext(this.applicationContext)
|
||||
.build();
|
||||
public HttpHandler httpHandler(
|
||||
ObjectProvider<WebSessionManager> webSessionManagerProvider) {
|
||||
WebHttpHandlerBuilder builder = WebHttpHandlerBuilder
|
||||
.applicationContext(this.applicationContext);
|
||||
WebSessionManager webSessionManager = webSessionManagerProvider
|
||||
.getIfAvailable();
|
||||
if (webSessionManager != null) {
|
||||
builder.sessionManager(webSessionManager);
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue