12 changed files with 221 additions and 2 deletions
@ -0,0 +1,58 @@
@@ -0,0 +1,58 @@
|
||||
/* |
||||
* 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.beans.factory.annotation.Autowired; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; |
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; |
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties; |
||||
import org.springframework.context.annotation.Conditional; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.data.mongodb.core.MongoOperations; |
||||
import org.springframework.session.SessionRepository; |
||||
import org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration; |
||||
|
||||
/** |
||||
* Mongo-backed session configuration. |
||||
* |
||||
* @author Eddú Meléndez |
||||
* @author Stephane Nicoll |
||||
*/ |
||||
@Configuration |
||||
@ConditionalOnMissingBean(SessionRepository.class) |
||||
@ConditionalOnBean(MongoOperations.class) |
||||
@Conditional(SessionCondition.class) |
||||
@EnableConfigurationProperties(MongoSessionProperties.class) |
||||
class MongoSessionConfiguration { |
||||
|
||||
@Configuration |
||||
public static class SpringBootMongoHttpSessionConfiguration |
||||
extends MongoHttpSessionConfiguration { |
||||
|
||||
@Autowired |
||||
public void customize(SessionProperties sessionProperties, |
||||
MongoSessionProperties mongoSessionProperties) { |
||||
Integer timeout = sessionProperties.getTimeout(); |
||||
if (timeout != null) { |
||||
setMaxInactiveIntervalInSeconds(timeout); |
||||
} |
||||
setCollectionName(mongoSessionProperties.getCollectionName()); |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
/* |
||||
* 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.context.properties.ConfigurationProperties; |
||||
|
||||
/** |
||||
* Configuration properties for Mongo-backed Spring Session. |
||||
* |
||||
* @author Andy Wilkinson |
||||
* @since 2.0.0 |
||||
*/ |
||||
@ConfigurationProperties(prefix = "spring.session.mongo") |
||||
public class MongoSessionProperties { |
||||
|
||||
/** |
||||
* Collection name used to store sessions. |
||||
*/ |
||||
private String collectionName = "sessions"; |
||||
|
||||
public String getCollectionName() { |
||||
return this.collectionName; |
||||
} |
||||
|
||||
public void setCollectionName(String collectionName) { |
||||
this.collectionName = collectionName; |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,91 @@
@@ -0,0 +1,91 @@
|
||||
/* |
||||
* 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.junit.Test; |
||||
|
||||
import org.springframework.beans.DirectFieldAccessor; |
||||
import org.springframework.boot.autoconfigure.AutoConfigurations; |
||||
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; |
||||
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; |
||||
import org.springframework.boot.test.context.HideClassesClassLoader; |
||||
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext; |
||||
import org.springframework.boot.test.context.runner.ContextConsumer; |
||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner; |
||||
import org.springframework.session.data.mongo.MongoOperationsSessionRepository; |
||||
import org.springframework.session.data.redis.RedisOperationsSessionRepository; |
||||
import org.springframework.session.hazelcast.HazelcastSessionRepository; |
||||
import org.springframework.session.jdbc.JdbcOperationsSessionRepository; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Mongo-specific tests for {@link SessionAutoConfiguration}. |
||||
* |
||||
* @author Andy Wilkinson |
||||
*/ |
||||
public class SessionAutoConfigurationMongoTests |
||||
extends AbstractSessionAutoConfigurationTests { |
||||
|
||||
private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() |
||||
.withConfiguration(AutoConfigurations.of(SessionAutoConfiguration.class)); |
||||
|
||||
@Test |
||||
public void defaultConfig() { |
||||
this.contextRunner.withPropertyValues("spring.session.store-type=mongo") |
||||
.withConfiguration(AutoConfigurations.of( |
||||
EmbeddedMongoAutoConfiguration.class, |
||||
MongoAutoConfiguration.class, MongoDataAutoConfiguration.class)) |
||||
.run(validateSpringSessionUsesMongo("sessions")); |
||||
} |
||||
|
||||
@Test |
||||
public void defaultConfigWithUniqueStoreImplementation() { |
||||
this.contextRunner |
||||
.withClassLoader( |
||||
new HideClassesClassLoader(HazelcastSessionRepository.class, |
||||
JdbcOperationsSessionRepository.class, |
||||
RedisOperationsSessionRepository.class)) |
||||
.withConfiguration(AutoConfigurations.of( |
||||
EmbeddedMongoAutoConfiguration.class, |
||||
MongoAutoConfiguration.class, MongoDataAutoConfiguration.class)) |
||||
.run(validateSpringSessionUsesMongo("sessions")); |
||||
} |
||||
|
||||
@Test |
||||
public void mongoSessionStoreWithCustomizations() { |
||||
this.contextRunner |
||||
.withConfiguration(AutoConfigurations.of( |
||||
EmbeddedMongoAutoConfiguration.class, |
||||
MongoAutoConfiguration.class, MongoDataAutoConfiguration.class)) |
||||
.withPropertyValues("spring.session.store-type=mongo", |
||||
"spring.session.mongo.collection-name=foo") |
||||
.run(validateSpringSessionUsesMongo("foo")); |
||||
} |
||||
|
||||
private ContextConsumer<AssertableWebApplicationContext> validateSpringSessionUsesMongo( |
||||
String collectionName) { |
||||
return (context) -> { |
||||
MongoOperationsSessionRepository repository = validateSessionRepository( |
||||
context, MongoOperationsSessionRepository.class); |
||||
assertThat(new DirectFieldAccessor(repository) |
||||
.getPropertyValue("collectionName")).isEqualTo(collectionName); |
||||
}; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue