diff --git a/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java b/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java index 64cd30e973..51b9f66cf3 100644 --- a/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java +++ b/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java @@ -16,15 +16,17 @@ package com.alibaba.druid.filter.config; import com.alibaba.druid.filter.FilterAdapter; +import com.alibaba.druid.filter.config.loader.ConfigLoader; +import com.alibaba.druid.filter.config.loader.ConfigLoaderFactory; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import com.alibaba.druid.proxy.jdbc.DataSourceProxy; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; -import com.alibaba.druid.support.security.decryptor.DecryptException; -import com.alibaba.druid.support.security.decryptor.Decrypter; -import com.alibaba.druid.support.security.decryptor.DecrypterFactory; -import com.alibaba.druid.support.security.decryptor.SensitiveParameters; +import com.alibaba.druid.filter.config.security.decrypter.DecryptException; +import com.alibaba.druid.filter.config.security.decrypter.Decrypter; +import com.alibaba.druid.filter.config.security.decrypter.DecrypterFactory; +import com.alibaba.druid.filter.config.security.decrypter.SensitiveParameters; import java.sql.SQLException; import java.util.Properties; @@ -76,10 +78,6 @@ import java.util.Properties; * #远程文件路径 * config.file=http://xxxxx(http://开头或者file:开头) * - * #AES解密, key不指定, 使用默认的 - * config.decrypt=AES - * config.decrypt.key=abcdfeg - * * #RSA解密, Key不指定, 使用默认的 * config.decrypt=RSA * config.decrypt.key=密钥字符串 diff --git a/src/main/java/com/alibaba/druid/filter/config/ConfigLoader.java b/src/main/java/com/alibaba/druid/filter/config/ConfigLoader.java deleted file mode 100644 index 118075a077..0000000000 --- a/src/main/java/com/alibaba/druid/filter/config/ConfigLoader.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.alibaba.druid.filter.config; - -import java.util.Properties; - -/** - *
- * 配置文件装载器.
- *
- * 要实现自己的装载器有如下要求.
- * 1. 一定要有自己的协议格式, 例如是由 my-protocol: 开头的protocol是由我支持的.
- * public isSupported(String protocol) {
- *     return protocol.startsWith("my-protocol:");
- * }
- *
- * 2. 要在class path的根目录下的ConfigLoader.properties注册(如果没有这个文件, 可以自己创建一个). 例如:
- * WEB-INF/classes/ConfigLoader.properties [格式如下]:
- * ConfigLoader.myConfigLoader=com.xxx.xxx.xx.MyConfigLoader
- *
- * 3. 配置DruidDataSource的时候的URL就要设置为装载器的协议格式
- * DruidDataSource dataSource = new DruidDataSource();
- * dataSource.setUrl("my-protocol:http://xxxxxx/");
- *
- * 
- * @see com.alibaba.druid.filter.config.impl.FileConfigLoader - * @see com.alibaba.druid.filter.config.impl.HttpConfigLoader - * - * @author Jonas Yang - */ -public interface ConfigLoader { - - /** - * 唯一的ID - * @return - */ - public String getId(); - - /** - * 获得配置内容, 如果没有, 返回null. - * @param protocol - * @return - */ - public Properties loadConfig(String protocol); - - /** - * 是否支持该协议, 如果支持, 将会使用该装载器获取配置文件 - * @param protocol - * @return - */ - public boolean isSupported(String protocol); -} diff --git a/src/main/java/com/alibaba/druid/filter/config/loader/ConfigLoader.java b/src/main/java/com/alibaba/druid/filter/config/loader/ConfigLoader.java new file mode 100644 index 0000000000..bcdf6119e6 --- /dev/null +++ b/src/main/java/com/alibaba/druid/filter/config/loader/ConfigLoader.java @@ -0,0 +1,36 @@ +package com.alibaba.druid.filter.config.loader; + +import java.util.Properties; + +/** + *
+ * 配置文件装载器.
+ * 
+ * + * @see com.alibaba.druid.filter.config.ConfigFilter + * @see ConfigLoaderFactory + * + * @author Jonas Yang + */ +public interface ConfigLoader { + + /** + * 唯一的ID + * @return + */ + public String getId(); + + /** + * 获得配置内容, 如果没有, 返回null. + * @param protocol + * @return + */ + public Properties loadConfig(String protocol); + + /** + * 是否支持该协议, 如果支持, 将会使用该装载器获取配置文件 + * @param protocol + * @return + */ + public boolean isSupported(String protocol); +} diff --git a/src/main/java/com/alibaba/druid/filter/config/ConfigLoaderFactory.java b/src/main/java/com/alibaba/druid/filter/config/loader/ConfigLoaderFactory.java similarity index 95% rename from src/main/java/com/alibaba/druid/filter/config/ConfigLoaderFactory.java rename to src/main/java/com/alibaba/druid/filter/config/loader/ConfigLoaderFactory.java index a8f8a2ff60..6cf5c2a0f9 100644 --- a/src/main/java/com/alibaba/druid/filter/config/ConfigLoaderFactory.java +++ b/src/main/java/com/alibaba/druid/filter/config/loader/ConfigLoaderFactory.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.filter.config; +package com.alibaba.druid.filter.config.loader; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; @@ -11,9 +11,9 @@ import java.util.concurrent.ConcurrentHashMap; /** *
  * 如果有扩展的装载器.
- * 可以放到classes目录下的ConfigLoader.properties
+ * 可以放到classes目录下的druid-config-loader.properties
  *
- * ConfigLoader.properties 内容如下:
+ * druid-config-loader.properties 内容如下:
  * ConfigLoader.x=com.xx.xxx.xx.MyConfigLoader
  *
  * 
diff --git a/src/main/java/com/alibaba/druid/filter/config/impl/FileConfigLoader.java b/src/main/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoader.java similarity index 96% rename from src/main/java/com/alibaba/druid/filter/config/impl/FileConfigLoader.java rename to src/main/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoader.java index f08486f217..6a03eeba58 100644 --- a/src/main/java/com/alibaba/druid/filter/config/impl/FileConfigLoader.java +++ b/src/main/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoader.java @@ -1,6 +1,6 @@ -package com.alibaba.druid.filter.config.impl; +package com.alibaba.druid.filter.config.loader.impl; -import com.alibaba.druid.filter.config.ConfigLoader; +import com.alibaba.druid.filter.config.loader.ConfigLoader; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.util.JdbcUtils; diff --git a/src/main/java/com/alibaba/druid/filter/config/impl/HttpConfigLoader.java b/src/main/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoader.java similarity index 95% rename from src/main/java/com/alibaba/druid/filter/config/impl/HttpConfigLoader.java rename to src/main/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoader.java index 9e47e38a02..5eeb45edb4 100644 --- a/src/main/java/com/alibaba/druid/filter/config/impl/HttpConfigLoader.java +++ b/src/main/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoader.java @@ -1,6 +1,6 @@ -package com.alibaba.druid.filter.config.impl; +package com.alibaba.druid.filter.config.loader.impl; -import com.alibaba.druid.filter.config.ConfigLoader; +import com.alibaba.druid.filter.config.loader.ConfigLoader; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.druid.util.JdbcUtils; diff --git a/src/main/java/com/alibaba/druid/support/security/decryptor/AbstractDecrypter.java b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/AbstractDecrypter.java similarity index 72% rename from src/main/java/com/alibaba/druid/support/security/decryptor/AbstractDecrypter.java rename to src/main/java/com/alibaba/druid/filter/config/security/decrypter/AbstractDecrypter.java index 0f4e47d0b4..a58c94ceaa 100644 --- a/src/main/java/com/alibaba/druid/support/security/decryptor/AbstractDecrypter.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/AbstractDecrypter.java @@ -1,9 +1,8 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; import com.alibaba.druid.util.Base64; import javax.crypto.Cipher; -import java.util.Properties; /** * 加密抽象类 @@ -12,11 +11,6 @@ import java.util.Properties; */ public abstract class AbstractDecrypter implements Decrypter { - /** - * DES, AES 密钥都有长度限制, 如果不够, 默认使用该字段补长 - */ - public static final String KEY_PADDING = "FOLLOW YOUR HEART. YOU CAN DO BEST THAN ANY ONE."; - public final static String KEY = "config.decrypt.key"; /** diff --git a/src/main/java/com/alibaba/druid/support/security/decryptor/DecryptException.java b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/DecryptException.java similarity index 87% rename from src/main/java/com/alibaba/druid/support/security/decryptor/DecryptException.java rename to src/main/java/com/alibaba/druid/filter/config/security/decrypter/DecryptException.java index 6bed53ee1f..450450b137 100644 --- a/src/main/java/com/alibaba/druid/support/security/decryptor/DecryptException.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/DecryptException.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; /** * 加密出错 diff --git a/src/main/java/com/alibaba/druid/support/security/decryptor/Decrypter.java b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/Decrypter.java similarity index 87% rename from src/main/java/com/alibaba/druid/support/security/decryptor/Decrypter.java rename to src/main/java/com/alibaba/druid/filter/config/security/decrypter/Decrypter.java index eba5ad061c..a922806f0c 100644 --- a/src/main/java/com/alibaba/druid/support/security/decryptor/Decrypter.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/Decrypter.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; import java.util.Properties; @@ -26,10 +26,10 @@ import java.util.Properties; * * *
- * 默认下, Druid 已经实现了AES, RSA加解密. AES, RSA 密文必须是通过Druid Tool的加密工具生成的 + * 默认下, Druid 已经实现了RSA加解密. RSA 密文必须是通过Druid Tool的加密工具生成的 * 获取默认解密方式可以通过 DecrypterFactory.getDecrypter(String id) *
- * 使用加密工具: java -cp druid-x.x.x.jar com.alibaba.druid.support.security.tool.Main + * 使用加密工具: java -cp druid-x.x.x.jar com.alibaba.druid.filter.config.security.tool.Main * @author Jonas Yang */ public interface Decrypter { diff --git a/src/main/java/com/alibaba/druid/support/security/decryptor/DecrypterFactory.java b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/DecrypterFactory.java similarity index 93% rename from src/main/java/com/alibaba/druid/support/security/decryptor/DecrypterFactory.java rename to src/main/java/com/alibaba/druid/filter/config/security/decrypter/DecrypterFactory.java index f94dcc88c1..93dc6d389d 100644 --- a/src/main/java/com/alibaba/druid/support/security/decryptor/DecrypterFactory.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/DecrypterFactory.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; @@ -17,10 +17,7 @@ public class DecrypterFactory { static { RsaDecrypter rsa = new RsaDecrypter(); - AesDecrypter aes = new AesDecrypter(); - decrypters.put(rsa.getId(), rsa); - decrypters.put(aes.getId(), aes); } private DecrypterFactory() {} diff --git a/src/main/java/com/alibaba/druid/support/security/decryptor/RsaDecrypter.java b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/RsaDecrypter.java similarity index 95% rename from src/main/java/com/alibaba/druid/support/security/decryptor/RsaDecrypter.java rename to src/main/java/com/alibaba/druid/filter/config/security/decrypter/RsaDecrypter.java index e3179906d3..0203a5f9d5 100644 --- a/src/main/java/com/alibaba/druid/support/security/decryptor/RsaDecrypter.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/RsaDecrypter.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; @@ -8,7 +8,6 @@ import com.alibaba.druid.util.JdbcUtils; import javax.crypto.Cipher; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; -import java.io.IOException; import java.security.KeyFactory; import java.security.PublicKey; import java.security.cert.Certificate; @@ -50,7 +49,10 @@ public class RsaDecrypter extends AbstractDecrypter { */ public SensitiveParameters decrypt(SensitiveParameters parameters, Properties info) throws DecryptException { PublicKey publicKey = getPublicKey(info); + return decrypt(parameters, publicKey); + } + protected SensitiveParameters decrypt(SensitiveParameters parameters, PublicKey publicKey) throws DecryptException { try { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, publicKey); diff --git a/src/main/java/com/alibaba/druid/support/security/decryptor/SensitiveParameters.java b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/SensitiveParameters.java similarity index 92% rename from src/main/java/com/alibaba/druid/support/security/decryptor/SensitiveParameters.java rename to src/main/java/com/alibaba/druid/filter/config/security/decrypter/SensitiveParameters.java index 3d2ddbf3a7..473f1baf22 100644 --- a/src/main/java/com/alibaba/druid/support/security/decryptor/SensitiveParameters.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/decrypter/SensitiveParameters.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; /** *
diff --git a/src/main/java/com/alibaba/druid/filter/config/security/tool/Action.java b/src/main/java/com/alibaba/druid/filter/config/security/tool/Action.java
new file mode 100644
index 0000000000..c774c56592
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/filter/config/security/tool/Action.java
@@ -0,0 +1,11 @@
+package com.alibaba.druid.filter.config.security.tool;
+
+/**
+ * @author Jonas Yang
+ */
+public interface Action {
+
+    public String getId();
+
+    public void execute();
+}
diff --git a/src/main/java/com/alibaba/druid/support/security/tool/HelpAction.java b/src/main/java/com/alibaba/druid/filter/config/security/tool/HelpAction.java
similarity index 95%
rename from src/main/java/com/alibaba/druid/support/security/tool/HelpAction.java
rename to src/main/java/com/alibaba/druid/filter/config/security/tool/HelpAction.java
index ea532c944d..6d589401ef 100644
--- a/src/main/java/com/alibaba/druid/support/security/tool/HelpAction.java
+++ b/src/main/java/com/alibaba/druid/filter/config/security/tool/HelpAction.java
@@ -1,4 +1,4 @@
-package com.alibaba.druid.support.security.tool;
+package com.alibaba.druid.filter.config.security.tool;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/com/alibaba/druid/support/security/tool/Main.java b/src/main/java/com/alibaba/druid/filter/config/security/tool/Main.java
similarity index 87%
rename from src/main/java/com/alibaba/druid/support/security/tool/Main.java
rename to src/main/java/com/alibaba/druid/filter/config/security/tool/Main.java
index 65ecafe701..7222ddb31f 100644
--- a/src/main/java/com/alibaba/druid/support/security/tool/Main.java
+++ b/src/main/java/com/alibaba/druid/filter/config/security/tool/Main.java
@@ -1,10 +1,10 @@
-package com.alibaba.druid.support.security.tool;
+package com.alibaba.druid.filter.config.security.tool;
 
 /**
  * 
  * Druid 提供的加密工具. 如下运行
  *
- * java -cp druid-x.x.x.jar com.alibaba.druid.support.security.tool.Main
+ * java -cp druid-x.x.x.jar com.alibaba.druid.filter.config.security.tool.Main
  *
  * 
* @author Jonas Yang @@ -17,7 +17,6 @@ public class Main { static { int i = 1; help.addAction(Integer.toString(i++), new RsaAction()); - help.addAction(Integer.toString(i++), new AesAction()); help.addAction("h", help); help.addAction("q", new QuitAction()); } diff --git a/src/main/java/com/alibaba/druid/support/security/tool/QuitAction.java b/src/main/java/com/alibaba/druid/filter/config/security/tool/QuitAction.java similarity index 91% rename from src/main/java/com/alibaba/druid/support/security/tool/QuitAction.java rename to src/main/java/com/alibaba/druid/filter/config/security/tool/QuitAction.java index ec27d72b50..58ab06317f 100644 --- a/src/main/java/com/alibaba/druid/support/security/tool/QuitAction.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/tool/QuitAction.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.tool; +package com.alibaba.druid.filter.config.security.tool; /** * @author Jonas Yang diff --git a/src/main/java/com/alibaba/druid/support/security/tool/RsaAction.java b/src/main/java/com/alibaba/druid/filter/config/security/tool/RsaAction.java similarity index 99% rename from src/main/java/com/alibaba/druid/support/security/tool/RsaAction.java rename to src/main/java/com/alibaba/druid/filter/config/security/tool/RsaAction.java index fbab2e9050..2978aae159 100644 --- a/src/main/java/com/alibaba/druid/support/security/tool/RsaAction.java +++ b/src/main/java/com/alibaba/druid/filter/config/security/tool/RsaAction.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.tool; +package com.alibaba.druid.filter.config.security.tool; import com.alibaba.druid.util.Base64; diff --git a/src/main/java/com/alibaba/druid/support/security/decryptor/AesDecrypter.java b/src/main/java/com/alibaba/druid/support/security/decryptor/AesDecrypter.java deleted file mode 100644 index ba0c9ff8a5..0000000000 --- a/src/main/java/com/alibaba/druid/support/security/decryptor/AesDecrypter.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.alibaba.druid.support.security.decryptor; - -import com.alibaba.druid.support.logging.Log; -import com.alibaba.druid.support.logging.LogFactory; - -import javax.crypto.Cipher; -import javax.crypto.spec.SecretKeySpec; -import java.util.Properties; - -/** - *
- * AES 解密器, 如果不指定密钥, 使用默认的密钥.
- * 通过一下方式指定密钥:
- * Properties info = new Properties();
- * info.put("config.decrypt.key", "密钥");
- *
- * String 明文 = new AesDecrypter().decrypt("密文", info);
- * 
- * - * @author Jonas Yang - */ -public class AesDecrypter extends AbstractDecrypter { - private static Log log = LogFactory.getLog(AesDecrypter.class); - - private final static int KEY_LENGTH = 16; //128 - - public String getId() { - return "AES"; - } - - /** - * 密钥 放在 Properties 参数中, key 是 config.decrypt.key, 如果不指定密钥, 将使用默认密钥 - * @param parameters 密文参数 - * @param info - * @return - * @throws DecryptException - */ - public SensitiveParameters decrypt(SensitiveParameters parameters, Properties info) throws DecryptException { - SecretKeySpec spec = getSpec(info); - - try { - Cipher cipher = Cipher.getInstance("AES"); - cipher.init(Cipher.DECRYPT_MODE, spec); - - String passwordPlainText = decrypt(cipher, parameters.getPassword()); - - return new SensitiveParameters(parameters.getUrl(), parameters.getUsername(), passwordPlainText); - } catch (Exception e) { - throw new DecryptException("Failed to decrypt JDBC password’", e); - } - } - - SecretKeySpec getSpec(Properties info) { - String key = null; - - if (info != null) { - key = info.getProperty(KEY); - } - - if (key == null) { - if (log.isDebugEnabled()) { - log.debug("Decrypt by default key"); - } - key = ""; - } - - if (key.length() < 16) { - key = KEY_PADDING.substring(0, KEY_LENGTH - key.length()) + key; - } - - return new SecretKeySpec(key.getBytes(), "AES"); - } - -} diff --git a/src/main/java/com/alibaba/druid/support/security/tool/AbstractAction.java b/src/main/java/com/alibaba/druid/support/security/tool/AbstractAction.java deleted file mode 100644 index a2eee151bd..0000000000 --- a/src/main/java/com/alibaba/druid/support/security/tool/AbstractAction.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.alibaba.druid.support.security.tool; - -/** - * @author Jonas Yang - */ -public abstract class AbstractAction implements Action { - private int minKeyLength; - - private int maxKeyLength; - - private String prompt; - - public AbstractAction(int minKeyLength, int maxKeyLength, String prompt) { - if (minKeyLength < 0 || maxKeyLength < 0) { - throw new IllegalArgumentException("The key length must be a positive."); - } - - if (maxKeyLength < minKeyLength) { - throw new IllegalArgumentException("The max length of key cannot be less than min length."); - } - - this.minKeyLength = minKeyLength; - this.maxKeyLength = maxKeyLength; - this.prompt = "[" + prompt + "]"; - } - - protected abstract String encrypt(String keyString, String plainString) throws Exception; - - @Override - public void execute() { - System.out.println(); - - String keyString = readPassword(); - if (keyString == null) return; - - String plainString = System.console().readLine(this.prompt + "请输入要需要加密的明文: "); - if (plainString == null) { - System.err.println("输入不能为空."); - return; - } - - try { - String encryptedString = encrypt(keyString, plainString); - System.out.println("请记住以下的密文, 长度为[" + encryptedString.length() + "]."); - System.out.println(); - System.out.println(encryptedString); - System.out.println(); - } catch (Exception e) { - System.out.println("加密出错."); - e.printStackTrace(); - } - } - - protected String readPassword() { - char[] keyChars = System.console().readPassword(this.prompt + "请输入密码[长度最大为" + this.maxKeyLength + "字节]: "); - if (keyChars == null) { - keyChars = new char[0]; - } - - String keyString = new String(keyChars); - - if (keyString.length() < this.minKeyLength || keyString.length() > this.maxKeyLength) { - System.err.println("错误: 密码长度要大于等于" + this.minKeyLength + ", 小于等于" + this.maxKeyLength + "."); - return null; - } - - keyString = KEY_PADDING.substring(0, this.maxKeyLength - keyString.length()) + keyString; - - return keyString; - } - -} diff --git a/src/main/java/com/alibaba/druid/support/security/tool/Action.java b/src/main/java/com/alibaba/druid/support/security/tool/Action.java deleted file mode 100644 index 32dd752371..0000000000 --- a/src/main/java/com/alibaba/druid/support/security/tool/Action.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.alibaba.druid.support.security.tool; - -import com.alibaba.druid.support.security.decryptor.AbstractDecrypter; - -/** - * @author Jonas Yang - */ -public interface Action { - /** - * DES, AES 密钥都有长度限制, 如果不够, 默认使用该字段补长 - */ - public String KEY_PADDING = AbstractDecrypter.KEY_PADDING; - - public String getId(); - - public void execute(); -} diff --git a/src/main/java/com/alibaba/druid/support/security/tool/AesAction.java b/src/main/java/com/alibaba/druid/support/security/tool/AesAction.java deleted file mode 100644 index 66006d5d54..0000000000 --- a/src/main/java/com/alibaba/druid/support/security/tool/AesAction.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.alibaba.druid.support.security.tool; - -import com.alibaba.druid.util.Base64; - -import javax.crypto.Cipher; -import javax.crypto.spec.SecretKeySpec; - -/** - * @author Jonas Yang - */ -public class AesAction extends AbstractAction { - - public AesAction() { - super(0, 16, "AES"); - } - - @Override - public String getId() { - return "AES"; - } - - protected String encrypt(String keyString, String plainString) throws Exception { - SecretKeySpec spec = new SecretKeySpec(keyString.getBytes(), "AES"); - - Cipher cipher = Cipher.getInstance("AES"); - cipher.init(Cipher.ENCRYPT_MODE, spec); - - byte[] encryptedBytes = cipher.doFinal(plainString.getBytes()); - - return Base64.byteArrayToBase64(encryptedBytes); - } -} diff --git a/src/main/resources/META-INF/druid-config-loader-default.properties b/src/main/resources/META-INF/druid-config-loader-default.properties index 0cf3be00df..a4a9b14f0b 100644 --- a/src/main/resources/META-INF/druid-config-loader-default.properties +++ b/src/main/resources/META-INF/druid-config-loader-default.properties @@ -1,2 +1,2 @@ -config.loader.1=com.alibaba.druid.filter.config.impl.FileConfigLoader -config.loader.2=com.alibaba.druid.filter.config.impl.HttpConfigLoader \ No newline at end of file +config.loader.1=com.alibaba.druid.filter.config.loader.impl.FileConfigLoader +config.loader.2=com.alibaba.druid.filter.config.loader.impl.HttpConfigLoader \ No newline at end of file diff --git a/src/test/java/com/alibaba/druid/bvt/filter/config/ConfigTestSuite.java b/src/test/java/com/alibaba/druid/bvt/filter/config/ConfigTestSuite.java index d8ca9ce3d3..77fb8b8227 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/config/ConfigTestSuite.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/config/ConfigTestSuite.java @@ -1,11 +1,11 @@ package com.alibaba.druid.bvt.filter.config; import com.alibaba.druid.filter.config.ConfigFilterTest; -import com.alibaba.druid.filter.config.ConfigLoaderFactoryTest; -import com.alibaba.druid.filter.config.impl.FileConfigLoaderTest; -import com.alibaba.druid.filter.config.impl.FileConfigLoaderTest1; -import com.alibaba.druid.filter.config.impl.HttpConfigLoaderTest; -import com.alibaba.druid.filter.config.impl.HttpConfigLoaderTest1; +import com.alibaba.druid.filter.config.loader.ConfigLoaderFactoryTest; +import com.alibaba.druid.filter.config.loader.impl.FileConfigLoaderTest; +import com.alibaba.druid.filter.config.loader.impl.FileConfigLoaderTest1; +import com.alibaba.druid.filter.config.loader.impl.HttpConfigLoaderTest; +import com.alibaba.druid.filter.config.loader.impl.HttpConfigLoaderTest1; import org.junit.runner.RunWith; import org.junit.runners.Suite; diff --git a/src/test/java/com/alibaba/druid/bvt/filter/config/DecrypterTestSuite.java b/src/test/java/com/alibaba/druid/bvt/filter/config/DecrypterTestSuite.java new file mode 100644 index 0000000000..d0013c5db4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/config/DecrypterTestSuite.java @@ -0,0 +1,17 @@ +package com.alibaba.druid.bvt.filter.config; + +import com.alibaba.druid.filter.config.security.decrypter.DecrypterFactoryTest; +import com.alibaba.druid.filter.config.security.decrypter.RsaDecrypterTest; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +/** + * @author Jonas Yang + */ +@RunWith(Suite.class) +@Suite.SuiteClasses({ + RsaDecrypterTest.class, + DecrypterFactoryTest.class +}) +public class DecrypterTestSuite { +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceDecryptTest.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceDecryptTest.java index fca599c560..4dbd8784fd 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceDecryptTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceDecryptTest.java @@ -1,15 +1,11 @@ package com.alibaba.druid.bvt.pool; -import com.alibaba.druid.support.security.decryptor.DecryptException; -import com.alibaba.druid.support.security.decryptor.Decrypter; import com.alibaba.druid.pool.DruidDataSource; -import com.alibaba.druid.support.security.decryptor.SensitiveParameters; import com.alibaba.druid.util.JdbcUtils; import org.junit.Assert; import org.junit.Test; import java.sql.SQLException; -import java.util.Properties; /** * @author Jonas Yang diff --git a/src/test/java/com/alibaba/druid/bvt/support/security/DecrypterTestSuite.java b/src/test/java/com/alibaba/druid/bvt/support/security/DecrypterTestSuite.java deleted file mode 100644 index ad935622bf..0000000000 --- a/src/test/java/com/alibaba/druid/bvt/support/security/DecrypterTestSuite.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.alibaba.druid.bvt.support.security; - -import com.alibaba.druid.support.security.decryptor.AesDecrypterTest; -import com.alibaba.druid.support.security.decryptor.DecrypterFactoryTest; -import com.alibaba.druid.support.security.decryptor.RsaDecrypterTest; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -/** - * @author Jonas Yang - */ -@RunWith(Suite.class) -@Suite.SuiteClasses({ - AesDecrypterTest.class, - RsaDecrypterTest.class, - DecrypterFactoryTest.class -}) -public class DecrypterTestSuite { -} diff --git a/src/test/java/com/alibaba/druid/filter/config/ConfigFilterTest.java b/src/test/java/com/alibaba/druid/filter/config/ConfigFilterTest.java index 0d04ff187e..960490d943 100644 --- a/src/test/java/com/alibaba/druid/filter/config/ConfigFilterTest.java +++ b/src/test/java/com/alibaba/druid/filter/config/ConfigFilterTest.java @@ -1,6 +1,6 @@ package com.alibaba.druid.filter.config; -import com.alibaba.druid.filter.config.impl.FileConfigLoader; +import com.alibaba.druid.filter.config.loader.impl.FileConfigLoader; import com.alibaba.druid.mock.MockDriver; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.util.JdbcUtils; diff --git a/src/test/java/com/alibaba/druid/filter/config/impl/HttpConfigLoaderTest1.java b/src/test/java/com/alibaba/druid/filter/config/impl/HttpConfigLoaderTest1.java deleted file mode 100644 index 9bd5ac2537..0000000000 --- a/src/test/java/com/alibaba/druid/filter/config/impl/HttpConfigLoaderTest1.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.alibaba.druid.filter.config.impl; - -import junit.framework.Assert; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.net.ServerSocket; -import java.net.Socket; -import java.util.Properties; - -/** - * @author Jonas Yang - */ -public class HttpConfigLoaderTest1 { - protected String protocol = "localhost:19999/test.properties"; - - protected ServerSocket server; - - @Before - public void setUp() { - try { - this.server = new ServerSocket(19999); - this.server.setReuseAddress(true); - Thread t = new Thread("Http Server Thread") { - @Override - public void run() { - try { - Socket socket = HttpConfigLoaderTest1.this.server.accept(); -// InputStream in = socket.getInputStream(); -// int b; -// while ((b = in.read()) != -1) { -// if (b == '\r') { -// b = in.read(); -// if (b == '\n') { -// b = in.read(); -// if (b == '\r') { -// b = in.read(); -// if (b == '\n') { -// break; -// } -// } -// } -// } -// -// if (b == -1) { -// break; -// } -// } - - PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); - out.println("a1=test1"); - out.println("b2=test2"); - out.flush(); - socket.close(); - } catch (IOException e) { - if (e.getMessage().indexOf("Socket closed") == -1 - && e.getMessage().indexOf("Socket is closed") == -1) - e.printStackTrace(); - } - } - }; - t.start(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @After - public void tearDown() { - if (this.server != null) { - try { - this.server.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - @Test - public void testLoadConfig() { - HttpConfigLoader configLoader = new HttpConfigLoader(); - Properties p = configLoader.loadConfig(HttpConfigLoader.PROTOCOL_PREFIX + this.protocol); - - Assert.assertNotNull("The properties is null", p); - Assert.assertEquals("The value is " + p.getProperty("a1") + ", not test1", "test1", p.getProperty("a1")); - } - - @Test - public void testLoadConfigByNotExistUrl() { - HttpConfigLoader configLoader = new HttpConfigLoader(); - Properties p = configLoader.loadConfig(HttpConfigLoader.PROTOCOL_PREFIX + "localhost/jonas"); - - Assert.assertNull("The properties is not null", p); - } -} diff --git a/src/test/java/com/alibaba/druid/filter/config/ConfigLoaderFactoryTest.java b/src/test/java/com/alibaba/druid/filter/config/loader/ConfigLoaderFactoryTest.java similarity index 91% rename from src/test/java/com/alibaba/druid/filter/config/ConfigLoaderFactoryTest.java rename to src/test/java/com/alibaba/druid/filter/config/loader/ConfigLoaderFactoryTest.java index a53087f971..93708a3598 100644 --- a/src/test/java/com/alibaba/druid/filter/config/ConfigLoaderFactoryTest.java +++ b/src/test/java/com/alibaba/druid/filter/config/loader/ConfigLoaderFactoryTest.java @@ -1,5 +1,7 @@ -package com.alibaba.druid.filter.config; +package com.alibaba.druid.filter.config.loader; +import com.alibaba.druid.filter.config.loader.ConfigLoader; +import com.alibaba.druid.filter.config.loader.ConfigLoaderFactory; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/com/alibaba/druid/filter/config/impl/FileConfigLoaderTest.java b/src/test/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoaderTest.java similarity index 94% rename from src/test/java/com/alibaba/druid/filter/config/impl/FileConfigLoaderTest.java rename to src/test/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoaderTest.java index 5a0d46c038..fc1e4889b5 100644 --- a/src/test/java/com/alibaba/druid/filter/config/impl/FileConfigLoaderTest.java +++ b/src/test/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoaderTest.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.filter.config.impl; +package com.alibaba.druid.filter.config.loader.impl; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/com/alibaba/druid/filter/config/impl/FileConfigLoaderTest1.java b/src/test/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoaderTest1.java similarity index 94% rename from src/test/java/com/alibaba/druid/filter/config/impl/FileConfigLoaderTest1.java rename to src/test/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoaderTest1.java index 5b66279c35..9044c83792 100644 --- a/src/test/java/com/alibaba/druid/filter/config/impl/FileConfigLoaderTest1.java +++ b/src/test/java/com/alibaba/druid/filter/config/loader/impl/FileConfigLoaderTest1.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.filter.config.impl; +package com.alibaba.druid.filter.config.loader.impl; import com.alibaba.druid.filter.config.ConfigFileGenerator; import junit.framework.Assert; diff --git a/src/test/java/com/alibaba/druid/filter/config/impl/HttpConfigLoaderTest.java b/src/test/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoaderTest.java similarity index 94% rename from src/test/java/com/alibaba/druid/filter/config/impl/HttpConfigLoaderTest.java rename to src/test/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoaderTest.java index 1c176c2728..9d4776095d 100644 --- a/src/test/java/com/alibaba/druid/filter/config/impl/HttpConfigLoaderTest.java +++ b/src/test/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoaderTest.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.filter.config.impl; +package com.alibaba.druid.filter.config.loader.impl; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoaderTest1.java b/src/test/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoaderTest1.java new file mode 100644 index 0000000000..30145d57cd --- /dev/null +++ b/src/test/java/com/alibaba/druid/filter/config/loader/impl/HttpConfigLoaderTest1.java @@ -0,0 +1,101 @@ +package com.alibaba.druid.filter.config.loader.impl; + +import junit.framework.Assert; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.Properties; + +/** + * @author Jonas Yang + */ +public class HttpConfigLoaderTest1 { + protected String protocol = "localhost:19999/test.properties"; + + protected ServerSocket server; + + @Before + public void setUp() { + try { + this.server = new ServerSocket(19999); + this.server.setReuseAddress(true); + Thread t = new Thread("Http Server Thread") { + @Override + public void run() { + while (true) { + try { + Socket socket = HttpConfigLoaderTest1.this.server.accept(); + // InputStream in = socket.getInputStream(); + // int b; + // while ((b = in.read()) != -1) { + // if (b == '\r') { + // b = in.read(); + // if (b == '\n') { + // b = in.read(); + // if (b == '\r') { + // b = in.read(); + // if (b == '\n') { + // break; + // } + // } + // } + // } + // + // if (b == -1) { + // break; + // } + // } + + PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); + out.println("a1=test1"); + out.println("b2=test2"); + out.flush(); + socket.close(); + } catch (IOException e) { + if (e.getMessage().indexOf("Socket closed") == -1 + && e.getMessage().indexOf("Socket is closed") == -1) + e.printStackTrace(); + } + } + } + }; + t.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @After + public void tearDown() { + if (this.server != null) { + try { + this.server.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @Test + public void testLoadConfig() { + HttpConfigLoader configLoader = new HttpConfigLoader(); + Properties p = configLoader.loadConfig(HttpConfigLoader.PROTOCOL_PREFIX + this.protocol); + + Assert.assertNotNull("The properties is null", p); + Assert.assertEquals("The value is " + p.getProperty("a1") + ", not test1", "test1", p.getProperty("a1")); + } + + @Test + public void testLoadConfigByNotExistUrl() { + HttpConfigLoader configLoader = new HttpConfigLoader(); + Properties p = configLoader.loadConfig(HttpConfigLoader.PROTOCOL_PREFIX + "localhost/jonas"); + + Assert.assertNull("The properties is not null", p); + } +} diff --git a/src/test/java/com/alibaba/druid/support/security/decryptor/DecrypterFactoryTest.java b/src/test/java/com/alibaba/druid/filter/config/security/decrypter/DecrypterFactoryTest.java similarity index 66% rename from src/test/java/com/alibaba/druid/support/security/decryptor/DecrypterFactoryTest.java rename to src/test/java/com/alibaba/druid/filter/config/security/decrypter/DecrypterFactoryTest.java index 61a952fcdc..ff852ae3eb 100644 --- a/src/test/java/com/alibaba/druid/support/security/decryptor/DecrypterFactoryTest.java +++ b/src/test/java/com/alibaba/druid/filter/config/security/decrypter/DecrypterFactoryTest.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; import junit.framework.Assert; import org.junit.Test; @@ -13,9 +13,6 @@ public class DecrypterFactoryTest { Assert.assertNotNull(DecrypterFactory.getDecrypter("RSA")); Assert.assertEquals(DecrypterFactory.getDecrypter("RSA").getClass(), RsaDecrypter.class); - Assert.assertNotNull(DecrypterFactory.getDecrypter("AES")); - Assert.assertEquals(DecrypterFactory.getDecrypter("AES").getClass(), AesDecrypter.class); - Assert.assertNull(DecrypterFactory.getDecrypter("ajfdjksfklds;")); } } diff --git a/src/test/java/com/alibaba/druid/support/security/decryptor/RsaDecrypterTest.java b/src/test/java/com/alibaba/druid/filter/config/security/decrypter/RsaDecrypterTest.java similarity index 97% rename from src/test/java/com/alibaba/druid/support/security/decryptor/RsaDecrypterTest.java rename to src/test/java/com/alibaba/druid/filter/config/security/decrypter/RsaDecrypterTest.java index 2c0f356fa5..b882a47692 100644 --- a/src/test/java/com/alibaba/druid/support/security/decryptor/RsaDecrypterTest.java +++ b/src/test/java/com/alibaba/druid/filter/config/security/decrypter/RsaDecrypterTest.java @@ -1,4 +1,4 @@ -package com.alibaba.druid.support.security.decryptor; +package com.alibaba.druid.filter.config.security.decrypter; import com.alibaba.druid.util.Base64; import junit.framework.Assert; @@ -124,7 +124,7 @@ public class RsaDecrypterTest { @Test public void testDecryptWithEmptyKey() throws DecryptException { RsaDecrypter decrypter = new RsaDecrypter(); - SensitiveParameters parameters = decrypter.decrypt(new SensitiveParameters("", "", "OJfUm6WCHi7EuXqE6aEc+Po2xFrAGBeSNy8O2jWhV2FTG8/5kbRRr2rjNKhptlevm/03Y0048P7h88gdUOXAYg=="), null); + SensitiveParameters parameters = decrypter.decrypt(new SensitiveParameters("", "", "OJfUm6WCHi7EuXqE6aEc+Po2xFrAGBeSNy8O2jWhV2FTG8/5kbRRr2rjNKhptlevm/03Y0048P7h88gdUOXAYg=="), (Properties) null); Assert.assertEquals("It is not same.", "xiaoyu", parameters.getPassword()); } diff --git a/src/test/java/com/alibaba/druid/support/security/decryptor/AesDecrypterTest.java b/src/test/java/com/alibaba/druid/support/security/decryptor/AesDecrypterTest.java deleted file mode 100644 index f0b7a7fa89..0000000000 --- a/src/test/java/com/alibaba/druid/support/security/decryptor/AesDecrypterTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.alibaba.druid.support.security.decryptor; - -import junit.framework.Assert; -import org.junit.Test; - -import java.util.Properties; - -/** - * @author Jonas Yang - */ -public class AesDecrypterTest { - - @Test - public void testDecrypt() throws DecryptException { - AesDecrypter decrypter = new AesDecrypter(); - Properties info = new Properties(); - info.setProperty(AesDecrypter.KEY, "123456"); - SensitiveParameters parameters = decrypter.decrypt(new SensitiveParameters("", "", "0UNXTyp/r/wdm+b5FAY1Jw=="), info); - - Assert.assertEquals("It is not same.", "xiaoyu", parameters.getPassword()); - } - - @Test - public void testDecryptWithEmptyKey() throws DecryptException { - AesDecrypter decrypter = new AesDecrypter(); - SensitiveParameters parameters = decrypter.decrypt(new SensitiveParameters("", "", "AzgdbVU3SIK6A8+0qg+Btg=="), null); - - Assert.assertEquals("It is not same.", "xiaoyu", parameters.getPassword()); - } -}