woody 3 місяців тому
батько
коміт
c7ea9e25b2

+ 2 - 0
framework-database/src/main/java/com/chelvc/framework/database/config/DatabaseConfigurer.java

@@ -34,6 +34,7 @@ import lombok.NonNull;
 import org.apache.ibatis.type.JdbcType;
 import org.apache.ibatis.type.TypeHandlerRegistry;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -99,6 +100,7 @@ public class DatabaseConfigurer {
     }
 
     @Bean
+    @ConditionalOnProperty(name = "database.crypto.secret")
     @ConditionalOnMissingBean(DatabaseCipherHandler.class)
     public DatabaseCipherHandler databaseCipherHandler(DatabaseProperties properties) {
         DatabaseProperties.Crypto crypto = properties.getCrypto();

+ 2 - 7
framework-database/src/main/java/com/chelvc/framework/database/crypto/DefaultDatabaseCipherHandler.java

@@ -4,7 +4,6 @@ import javax.crypto.Cipher;
 
 import com.chelvc.framework.base.crypto.AbstractCipherHandler;
 import com.chelvc.framework.common.util.AESUtils;
-import com.chelvc.framework.common.util.StringUtils;
 import com.chelvc.framework.database.config.DatabaseProperties;
 import lombok.Getter;
 import lombok.NonNull;
@@ -23,11 +22,7 @@ public class DefaultDatabaseCipherHandler extends AbstractCipherHandler implemen
     public DefaultDatabaseCipherHandler(@NonNull DatabaseProperties.Crypto properties) {
         this.mixed = properties.isMixed();
         this.writable = properties.isWritable();
-        this.encryptor = StringUtils.ifEmpty(
-                properties.getSecret(), secret -> AESUtils.getEncryptor(AESUtils.ECB_PKCS5PADDING, secret)
-        );
-        this.decrypter = StringUtils.ifEmpty(
-                properties.getSecret(), secret -> AESUtils.getDecrypter(AESUtils.ECB_PKCS5PADDING, secret)
-        );
+        this.encryptor = AESUtils.getEncryptor(AESUtils.ECB_PKCS5PADDING, properties.getSecret());
+        this.decrypter = AESUtils.getDecrypter(AESUtils.ECB_PKCS5PADDING, properties.getSecret());
     }
 }

+ 1 - 1
framework-security/src/main/java/com/chelvc/framework/security/config/OAuthConfigurer.java

@@ -76,7 +76,7 @@ import org.springframework.security.web.access.AccessDeniedHandler;
 @Slf4j
 @EnableWebSecurity
 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
-@ConditionalOnProperty(value = "security.oauth.enabled", havingValue = "true")
+@ConditionalOnProperty(name = "security.oauth.enabled", havingValue = "true")
 public class OAuthConfigurer extends WebSecurityConfigurerAdapter {
     private final SecurityProperties properties;
     private final ApplicationContext applicationContext;

+ 2 - 0
framework-security/src/main/java/com/chelvc/framework/security/config/SecurityConfigurer.java

@@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.type.CollectionType;
 import org.aopalliance.intercept.MethodInvocation;
 import org.springframework.beans.BeansException;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.annotation.Bean;
@@ -114,6 +115,7 @@ public class SecurityConfigurer extends GlobalMethodSecurityConfiguration implem
     }
 
     @Bean
+    @ConditionalOnProperty(name = "security.crypto.secret")
     @ConditionalOnMissingBean(SecurityCipherHandler.class)
     public SecurityCipherHandler securityCipherHandler(SecurityProperties properties) {
         SecurityProperties.Crypto crypto = properties.getCrypto();

+ 4 - 3
framework-security/src/main/java/com/chelvc/framework/security/crypto/AbstractSecurityCipherHandler.java

@@ -1,5 +1,7 @@
 package com.chelvc.framework.security.crypto;
 
+import java.util.Objects;
+
 import com.chelvc.framework.base.context.Session;
 import com.chelvc.framework.base.crypto.AbstractCipherHandler;
 import com.chelvc.framework.common.util.CodecUtils;
@@ -18,18 +20,17 @@ public abstract class AbstractSecurityCipherHandler extends AbstractCipherHandle
     protected final String secret;
 
     public AbstractSecurityCipherHandler(@NonNull SecurityProperties.Crypto properties) {
-        this.secret = properties.getSecret();
+        this.secret = Objects.requireNonNull(properties.getSecret());
     }
 
     @Override
     public String sign(@NonNull Session session, String payload) {
-        String secret = ObjectUtils.ifNull(this.secret, StringUtils.EMPTY);
         String id = ObjectUtils.ifNull(session.getId(), String::valueOf, () -> StringUtils.EMPTY);
         String device = ObjectUtils.ifNull(session.getDevice(), StringUtils.EMPTY);
         String terminal = ObjectUtils.ifNull(session.getTerminal(), Enum::name, () -> StringUtils.EMPTY);
         String version = ObjectUtils.ifNull(session.getVersion(), StringUtils.EMPTY);
         String timestamp = ObjectUtils.ifNull(session.getTimestamp(), String::valueOf, () -> StringUtils.EMPTY);
-        String plaintext = secret + id + device + terminal + version + timestamp + payload;
+        String plaintext = this.secret + id + device + terminal + version + timestamp + payload;
         return CodecUtils.md5(plaintext);
     }
 }

+ 4 - 4
framework-security/src/main/java/com/chelvc/framework/security/crypto/DefaultSecurityCipherHandler.java

@@ -21,9 +21,9 @@ public class DefaultSecurityCipherHandler extends AbstractSecurityCipherHandler
     public DefaultSecurityCipherHandler(@NonNull SecurityProperties.Crypto properties) {
         super(properties);
         String name = AESUtils.CBC_PKCS5PADDING, secret = properties.getSecret(), iv = properties.getIv();
-        this.encryptor = StringUtils.ifEmpty(secret, s -> StringUtils.isEmpty(iv) ?
-                AESUtils.getEncryptor(name, secret) : AESUtils.getEncryptor(name, secret, iv));
-        this.decrypter = StringUtils.ifEmpty(secret, s -> StringUtils.isEmpty(iv) ?
-                AESUtils.getDecrypter(name, secret) : AESUtils.getDecrypter(name, secret, iv));
+        this.encryptor = StringUtils.isEmpty(iv) ?
+                AESUtils.getEncryptor(name, secret) : AESUtils.getEncryptor(name, secret, iv);
+        this.decrypter = StringUtils.isEmpty(iv) ?
+                AESUtils.getDecrypter(name, secret) : AESUtils.getDecrypter(name, secret, iv);
     }
 }