# catoop-springproperties
**Repository Path**: catoop/catoop-springproperties
## Basic Information
- **Project Name**: catoop-springproperties
- **Description**: 使用springframework开发应用程序时,对properties文件内容进行加密解密。
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2017-03-13
- **Last Updated**: 2021-09-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
#catoop-springproperties
使用方法:
###一、在要使用的项目中添加依赖配置(你需要将该工程maven打包发布到你的私库)
```
com.catoop
catoop-springproperties
1.1.1
```
###二、使用命令对明文字符串进行加密
```
java -cp D:\apache-maven\repository\com\catoop\catoop-springproperties\1.0\catoop-springproperties-1.0.jar com.catoop.spring.prop.EncryptTools pwd123456
```
命令执行完毕后会输出:privateKey(私钥)、publicKey(公钥)、encryptValue(加密后的字符串)
如果我们公钥和私钥都已经有了,我们使用命令时可以指定私钥串进行加密,命令如下:
```
java -cp D:\apache-maven\repository\com\catoop\catoop-springproperties\1.0\catoop-springproperties-1.0.jar com.catoop.spring.prop.EncryptTools pwd123456 "MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAkaZlFp70x8s+5a6Jk9VkifoT+5hNQlwc/J2CLIrqoMji5mJYvDdouHFaGxKdZMSJ+bTbBaFTYcGc2jqSQPQGRwIDAQABAkBTDJcNi/u1RL4LhzcpVX8rca4dQt2i3hUlMca9EUTyAlg73v0t3tINdwwQ+YnA5HqtP6I0wyzWV6ziTefhs+khAiEA8SP6zdr1k5cN8SDhwuMEO3qtIgDoL4niYt4Mbh2jyjECIQCaoApTeSYMCvj0edO4tbtgjKWjvN8b2FWVLi1maA3B9wIhAOIdF9eh4rbzZMpfR/LjxpszbFc/PHkfNR36EvPKbURxAiAUu06HIKA0TyhQByGXC27DJDh1OrajUh8vcFCQAXWOwwIhAKW5XQOSwjVngSldWlAWNvSP7pxMGGB3jz0+EgFhf30g"
```
执行命令会输出加密后的密文字符串。
###三、修改properties配置文件,将需要加密的字符串加密后配置到配置文件中
如下以数据库连接密码为例(支持对配置文件中所有的key值进行加密):
```
jdbc.username=dbloginname
jdbc.password=ENCRYPT@@R/BpVAYJy+eanwcnuHW0rWOaoISUI34FALuj+oZhjrK3qKV3RYYze9yjVreNPDTeK3zWp1Qd0FcJYZQhn4/Cg==
props.publickey=file://F:/workspace-trunc-cg/keys/pubkey.key
```
###四、修改spring配置文件
将如下代码
```
classpath:application.properties
UTF-8
```
或者
```
```
修改为:
```
classpath:application.properties
UTF-8
```
其中publicKey如果没有配置,则不会对配置文件中的任何内容进行解密。
publicKey的配置方式可以有3种:
1.可以直接配置公钥字符串;如:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJPsIdV==
2.可以配置公钥的本地文件绝对路径;如:file://E:/key/publickey.key或Linux下的/data/key/publickey.key
3.可以配置公钥的网络地址路径;如:http://192.168.x.x:8081/key/publickey.key
至此,就可以启动工程测试验证结果了。
====================================================================================================
SpringMVC框架,分为applicationContext和WebApplicationContext
我们一般在 spring-context.xml 和 spring-mvc.xml 中都需要配置 PropertyPlaceholderConfigurer 分别用来加载和注入不同 applicationContext 中的属性。
这时候,你可以像上面一样那上面代码拷贝两份,你也可以使用下面这种方法:
```
classpath:application.properties
```
下面这段配置你可以再 spring-context.xml 和 spring-mvc.xml 中分别放一份,这样我们的解密动作就只会触发一次了(多次触发也无所谓,并不消耗上面资源)
```
```
================================================================================================================
###版本变更
v1.1.1
1. 如下配置 decryptPropsBean 不再为必须配置,可以不配置
```
jdbc.url
jdbc.username
jdbc.password
```
2. properties 配置文件中对加密的值,增加使用前缀标记 `ENCRYPT@@` ,例如:
```
jdbc.password=ENCRYPT@@RFclMuKpu13sx+0N88ohoyy/5/XKVId3X8T7eU4bqaOqqubSFIFwG68VYv4GBhRYAqDeYRgi24MDh7242vp5mA==
```
3. 注意配置 decryptPropsBean 和 前缀标记 ENCRYPT@@ 不可同时配置,只能选取一种方式。
----------------------------------------------------------------------------------------------------------------