From 6367527ff6dfa6a2bc99200ac81924444cb4efe5 Mon Sep 17 00:00:00 2001 From: John Blum Date: Mon, 28 May 2018 20:46:20 -0700 Subject: [PATCH] Rename o.s.b.d.g.autoconfigure.SecurityAutoConfiguration to ClientSecurityAutoConfiguration. Add support to auto-configure Apache Geode/Pivotal GemFire Security on a peer Cache member by setting SecurityManager using the o.s.b.d.g.security.support.SecurityManagerProxy when an org.apache.geode.security.SecurityManager implementation is declared and registered as a bean in the Spring context. --- ...a => ClientSecurityAutoConfiguration.java} | 7 ++- .../PeerSecurityAutoConfiguration.java | 61 +++++++++++++++++++ .../main/resources/META-INF/spring.factories | 5 +- 3 files changed, 68 insertions(+), 5 deletions(-) rename geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/{SecurityAutoConfiguration.java => ClientSecurityAutoConfiguration.java} (97%) create mode 100644 geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/PeerSecurityAutoConfiguration.java diff --git a/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/SecurityAutoConfiguration.java b/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/ClientSecurityAutoConfiguration.java similarity index 97% rename from geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/SecurityAutoConfiguration.java rename to geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/ClientSecurityAutoConfiguration.java index 80b573d0..b8bfab53 100644 --- a/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/SecurityAutoConfiguration.java +++ b/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/ClientSecurityAutoConfiguration.java @@ -63,16 +63,17 @@ import org.springframework.data.gemfire.config.annotation.support.AutoConfigured */ @Configuration @AutoConfigureBefore(ClientCacheAutoConfiguration.class) -@Conditional(SecurityAutoConfiguration.EnableSecurityCondition.class) +@Conditional(ClientSecurityAutoConfiguration.EnableSecurityCondition.class) +//@ConditionalOnBean(ClientCacheFactoryBean.class) @ConditionalOnClass({ ClientCacheFactoryBean.class, ClientCache.class }) @EnableSecurity @SuppressWarnings("unused") -public class SecurityAutoConfiguration { +public class ClientSecurityAutoConfiguration { public static final String SECURITY_CLOUD_ENVIRONMENT_POST_PROCESSOR_DISABLED_PROPERTY = "spring.boot.data.gemfire.security.auth.environment.post-processor.disabled"; - private static final String CLOUD_CACHE_PROPERTY_SOURCE_NAME = "cloudcache-security"; + private static final String CLOUD_CACHE_PROPERTY_SOURCE_NAME = "cloudcache-configuration"; private static final String MANAGEMENT_HTTP_HOST_PROPERTY = "spring.data.gemfire.management.http.host"; private static final String MANAGEMENT_HTTP_PORT_PROPERTY = "spring.data.gemfire.management.http.port"; diff --git a/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/PeerSecurityAutoConfiguration.java b/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/PeerSecurityAutoConfiguration.java new file mode 100644 index 00000000..97677f19 --- /dev/null +++ b/geode-spring-boot-starter/src/main/java/org/springframework/boot/data/geode/autoconfigure/PeerSecurityAutoConfiguration.java @@ -0,0 +1,61 @@ +/* + * Copyright 2018 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.data.geode.autoconfigure; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.gemfire.client.ClientCacheFactoryBean; +import org.springframework.data.gemfire.config.annotation.ApacheShiroSecurityConfiguration; +import org.springframework.data.gemfire.config.annotation.EnableSecurity; +import org.springframework.data.gemfire.config.annotation.GeodeIntegratedSecurityConfiguration; +import org.springframework.data.gemfire.config.annotation.PeerCacheConfigurer; + +/** + * Spring Boot {@link EnableAutoConfiguration auto-configuration} enabling Apache Geode's Security functionality, + * and specifically Authentication between a client and server using Spring Data Geode Security annotations. + * + * @author John Blum + * @see org.apache.geode.security.SecurityManager + * @see org.springframework.boot.autoconfigure.EnableAutoConfiguration + * @see org.springframework.context.annotation.Configuration + * @see org.springframework.data.gemfire.CacheFactoryBean + * @see org.springframework.data.gemfire.client.ClientCacheFactoryBean + * @see org.springframework.data.gemfire.config.annotation.ApacheShiroSecurityConfiguration + * @see org.springframework.data.gemfire.config.annotation.EnableSecurity + * @see org.springframework.data.gemfire.config.annotation.GeodeIntegratedSecurityConfiguration + * @see org.springframework.data.gemfire.config.annotation.PeerCacheConfigurer + * @since 1.0.0 + */ +@Configuration +@ConditionalOnBean(org.apache.geode.security.SecurityManager.class) +@ConditionalOnMissingBean({ + ClientCacheFactoryBean.class, + ApacheShiroSecurityConfiguration.class, + GeodeIntegratedSecurityConfiguration.class +}) +@EnableSecurity(securityManagerClassName = "org.springframework.boot.data.geode.security.support.SecurityManagerProxy") +@SuppressWarnings("unused") +public class PeerSecurityAutoConfiguration { + + @Bean + PeerCacheConfigurer gemfireCacheUseBeanFactoryLocatorConfigurer() { + return (beanName, cacheFactoryBean) -> cacheFactoryBean.setUseBeanFactoryLocator(true); + } +} diff --git a/geode-spring-boot-starter/src/main/resources/META-INF/spring.factories b/geode-spring-boot-starter/src/main/resources/META-INF/spring.factories index 6be6ead8..2baffaba 100644 --- a/geode-spring-boot-starter/src/main/resources/META-INF/spring.factories +++ b/geode-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -2,13 +2,14 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.data.geode.autoconfigure.ClientCacheAutoConfiguration,\ org.springframework.boot.data.geode.autoconfigure.CachingProviderAutoConfiguration,\ +org.springframework.boot.data.geode.autoconfigure.ClientSecurityAutoConfiguration,\ org.springframework.boot.data.geode.autoconfigure.ContinuousQueryAutoConfiguration,\ org.springframework.boot.data.geode.autoconfigure.FunctionExecutionAutoConfiguration,\ +org.springframework.boot.data.geode.autoconfigure.PeerSecurityAutoConfiguration,\ org.springframework.boot.data.geode.autoconfigure.RepositoriesAutoConfiguration,\ -org.springframework.boot.data.geode.autoconfigure.SecurityAutoConfiguration,\ org.springframework.boot.data.geode.autoconfigure.SslAutoConfiguration # Environment Post Processing org.springframework.boot.env.EnvironmentPostProcessor=\ -org.springframework.boot.data.geode.autoconfigure.SecurityAutoConfiguration.AutoConfiguredCloudSecurityEnvironmentPostProcessor,\ +org.springframework.boot.data.geode.autoconfigure.ClientSecurityAutoConfiguration.AutoConfiguredCloudSecurityEnvironmentPostProcessor,\ org.springframework.boot.data.geode.autoconfigure.SslAutoConfiguration.SslEnvironmentPostProcessor