From f6f8be888225ee751cf865ebeab863b6bd75e5a6 Mon Sep 17 00:00:00 2001 From: John Blum Date: Fri, 3 May 2019 19:10:13 -0700 Subject: [PATCH] Encapsulate configuration of Apache Geode/Pivotal GemFire (PCC) Security (Auth) using an enabling Annotation and security-manager property with proxying. --- .../EnableSecurityManagerProxy.java | 49 +++++++++++++++++ .../SecurityManagerProxyConfiguration.java | 54 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 spring-geode/src/main/java/org/springframework/geode/config/annotation/EnableSecurityManagerProxy.java create mode 100644 spring-geode/src/main/java/org/springframework/geode/config/annotation/SecurityManagerProxyConfiguration.java diff --git a/spring-geode/src/main/java/org/springframework/geode/config/annotation/EnableSecurityManagerProxy.java b/spring-geode/src/main/java/org/springframework/geode/config/annotation/EnableSecurityManagerProxy.java new file mode 100644 index 00000000..235641a5 --- /dev/null +++ b/spring-geode/src/main/java/org/springframework/geode/config/annotation/EnableSecurityManagerProxy.java @@ -0,0 +1,49 @@ +/* + * Copyright 2019 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 + * + * https://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.geode.config.annotation; + +import java.lang.annotation.Annotation; +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.context.annotation.Import; + +/** + * Spring {@link Annotation} to enable Apache Geode or Pivotal GemFire (PCC) Security (Auth) through proxying. + * + * @author John Blum + * @see java.lang.annotation.Annotation + * @see java.lang.annotation.Documented + * @see java.lang.annotation.Inherited + * @see java.lang.annotation.Retention + * @see java.lang.annotation.Target + * @see org.springframework.context.annotation.Import + * @see org.springframework.geode.config.annotation.SecurityManagerProxyConfiguration + * @since 1.1.0 + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Inherited +@Documented +@Import(SecurityManagerProxyConfiguration.class) +@SuppressWarnings("unused") +public @interface EnableSecurityManagerProxy { + +} diff --git a/spring-geode/src/main/java/org/springframework/geode/config/annotation/SecurityManagerProxyConfiguration.java b/spring-geode/src/main/java/org/springframework/geode/config/annotation/SecurityManagerProxyConfiguration.java new file mode 100644 index 00000000..2a447116 --- /dev/null +++ b/spring-geode/src/main/java/org/springframework/geode/config/annotation/SecurityManagerProxyConfiguration.java @@ -0,0 +1,54 @@ +/* + * Copyright 2019 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 + * + * https://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.geode.config.annotation; + +import java.util.Properties; + +import org.springframework.context.ApplicationListener; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.data.gemfire.config.annotation.EnableBeanFactoryLocator; +import org.springframework.data.gemfire.config.annotation.EnableSecurity; +import org.springframework.geode.security.support.SecurityManagerProxy; + +/** + * Spring {@link Configuration} class used to configure a {@link org.apache.geode.security.SecurityManager}, + * thereby enabling Security (Auth) on this GemFire/Geode node. + * + * @author John Blum + * @see org.springframework.context.ApplicationListener + * @see org.springframework.context.annotation.Configuration + * @see org.springframework.context.event.ContextRefreshedEvent + * @see org.springframework.data.gemfire.config.annotation.EnableBeanFactoryLocator + * @see org.springframework.data.gemfire.config.annotation.EnableSecurity + * @see org.springframework.geode.security.support.SecurityManagerProxy + * @since 1.1.0 + */ +@Configuration +@EnableBeanFactoryLocator +@EnableSecurity(securityManagerClassName = "org.springframework.geode.security.support.SecurityManagerProxy") +@SuppressWarnings("unused") +public class SecurityManagerProxyConfiguration implements ApplicationListener { + + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + + SecurityManagerProxy securityManagerProxy = SecurityManagerProxy.getInstance(); + + securityManagerProxy.setBeanFactory(event.getApplicationContext().getAutowireCapableBeanFactory()); + securityManagerProxy.init(new Properties()); + } +}