12 changed files with 221 additions and 2 deletions
@ -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 @@ |
|||||||
|
/* |
||||||
|
* 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 @@ |
|||||||
|
/* |
||||||
|
* 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