From 9a65a2f1a8cd11e7684f4a3df4bba6c30cafa17c Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Fri, 18 Dec 2015 10:17:52 +0000 Subject: [PATCH] Allow configuration of symmetric key in server outside bootstrap There's no reason the encrypotor needs to be in the bootstrap context so we can still support symmetric key encryption via /encrypt and /decrypt without requiring it to be configured there. With this change we just look for key properties in the current context and create an encryptor the same way the bootstrap listener does in spring-cloud-commons. --- .../server/config/ConfigServerMvcConfiguration.java | 2 +- .../server/config/EncryptionAutoConfiguration.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerMvcConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerMvcConfiguration.java index 1e28e471..3531b0c8 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerMvcConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerMvcConfiguration.java @@ -70,7 +70,7 @@ public class ConfigServerMvcConfiguration extends WebMvcConfigurerAdapter { return controller; } - private EnvironmentEncryptorEnvironmentRepository encrypted() { + private EnvironmentRepository encrypted() { EnvironmentEncryptorEnvironmentRepository encrypted = new EnvironmentEncryptorEnvironmentRepository( this.repository, this.environmentEncryptor); encrypted.setOverrides(this.server.getOverrides()); diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EncryptionAutoConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EncryptionAutoConfiguration.java index b5342dd7..07d27f68 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EncryptionAutoConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EncryptionAutoConfiguration.java @@ -27,12 +27,14 @@ import org.springframework.cloud.config.server.encryption.CipherEnvironmentEncry import org.springframework.cloud.config.server.encryption.EnvironmentEncryptor; import org.springframework.cloud.config.server.encryption.KeyStoreTextEncryptorLocator; import org.springframework.cloud.config.server.encryption.TextEncryptorLocator; +import org.springframework.cloud.context.encrypt.EncryptorFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.encrypt.Encryptors; import org.springframework.security.crypto.encrypt.TextEncryptor; import org.springframework.security.rsa.crypto.KeyStoreKeyFactory; import org.springframework.security.rsa.crypto.RsaSecretEncryptor; +import org.springframework.util.StringUtils; /** * Auto configuration for text encryptors and environment encryptors (non-web stuff). @@ -45,13 +47,20 @@ import org.springframework.security.rsa.crypto.RsaSecretEncryptor; * */ @Configuration +@EnableConfigurationProperties(KeyProperties.class) public class EncryptionAutoConfiguration { @ConditionalOnMissingBean(TextEncryptor.class) protected static class DefaultTextEncryptorConfiguration { + @Autowired + private KeyProperties key; + @Bean public TextEncryptor nullTextEncryptor() { + if (StringUtils.hasText(this.key.getKey())) { + return new EncryptorFactory().create(this.key.getKey()); + } return Encryptors.noOpText(); }