郑州网站建设汉狮,网页设计作品作业成品免费下载,工程建设比选公告固价方式网站,排版在实践中#xff0c;项目的某些配置信息是需要进行加密处理的#xff0c;以减少敏感信息泄露的风险。比如#xff0c;在使用Druid时#xff0c;就可以基于它提供的公私钥加密方式对数据库的密码进行加密。但更多时候#xff0c;比如Redis密码、MQ密码等敏感信息#xff0… 在实践中项目的某些配置信息是需要进行加密处理的以减少敏感信息泄露的风险。比如在使用Druid时就可以基于它提供的公私钥加密方式对数据库的密码进行加密。但更多时候比如Redis密码、MQ密码等敏感信息也需要进行加密此时就没那么方便了。本篇文章给大家介绍一款Java类库Jasypt同时基于Spring Boot项目来演示一下如何对配置文件信息进行加密。一个简单的SpringBoot项目 我们先来创建一个简单的Spring Boot项目构建一个加密数据运用的场景。无论通过Idea或官网等方式先创建一个Spring Boot项目核心依赖为dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency
!-- 为了方便通常会引入Lombok依赖 --
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId
/dependency创建一个配置文件类ConfigPropertiesData
Component
public class ConfigProperties {Value(${conf.url})private String url;Value(${conf.password})private String password;}配置文件中的配置属性注入到该类以供后续使用。创建一个Controller类用来测试验证是否能够正常运行RestController
RequestMapping(/)
public class ConfigController {Resourceprivate ConfigProperties configProperties;RequestMappingpublic void print(){System.out.println(configProperties.getUrl());System.out.println(configProperties.getPassword());}
}对应ConfigProperties类application.properties中配置如下conf.url127.0.0.1
conf.passwordadmin123此时启动项目访问Controller能够正常打印出配置信息说明程序可以正常运行。但配置文件中直接明文展示了password项如果别人看到该配置文件就可能导致密码的泄露。基于Jasypt的加密 针对上述情况通常我们会对敏感信息进行加密避免明文密码信息暴露提升安全等级。加密的基本思路是配置文件中存储加密内容在解析配置文件注入时进行解密。但如果拿到项目源码知道加密算法和秘钥肯定是可以解密的。这里的加密只是多一层安全防护但并不是万能的。下面看看如何基于Jasypt来进行加密处理。集成步骤 下面基于上述Spring Boot项目进行改造升级。环境准备不同版本的Jasypt使用方法有所不同这里基于3.0.4版本、JDK8、Spring Boot 2.5.5来进行演示。在使用之前首先检查一下JDK8的JRE中是否安装了不限长度的JCE版本否则在执行加密操作时会抛出解密失败的异常。进入$JAVA_HOME/jre/lib/security目录查看是否包含local_policy.jar和US_export_policy.jar两个jar包。如果不包含则通过Oracle官网进行下载下载地址https://www.oracle.com/java/technologies/javase-jce8-downloads.html。下载文件为jce_policy-8.zip文件内包含三个文件README.txt
local_policy.jar
US_export_policy.jar查看$JAVA_HOME/jre/lib/security目录下是否有这两个jar包文件如果没有则复制进去如果有可考虑覆盖。引入依赖在Spring Boot中集成Jasypt比较简单直接引入如下依赖即可dependencygroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-spring-boot-starter/artifactIdversion3.0.4/version
/dependency此时Jasypt组件自动配置便已经生效只需要对需要加密的数据进行处理了。为了方便对密码进行加密还可以在pom.xml中的build元素中引入对应的plugin这个后面会用到plugingroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-maven-plugin/artifactIdversion3.0.4/version
/plugin至此所有的准备工作已经完成。内容加密内容加密有多种方式这里挑选两种方式进行介绍。方式一单元测试类生成密文构建如下单元测试类使用默认实例化的StringEncryptor对密码进行加密SpringBootTest
class SpringBootJasyptApplicationTests {Autowiredprivate StringEncryptor stringEncryptor;Testvoid contextLoads() {String qwerty1234 stringEncryptor.encrypt(admin123);System.out.println(qwerty1234);}
}其中”admin123“便是要加密的内容。执行上述程序便可打印加密后的内容。这种形式加密的内容全部采用默认值。方式二通过Maven插件生成密文在上面已经引入了Jasypt的Maven插件可通过对应的命令进行生成密码。第一步在配置文件中添加加密的密码jasypt.encryptor.passwordafx11然后对配置文件中需要加密的数据进行改造在数据前添加”DEC(“在数据尾部加上)修改完如下conf.passwordDEC(admin123)这里添加的DEC()是告诉插件此部分内容需要进行加密处理。注意这里关键字是DEC。第二步执行Maven命令对上述数据进行加密处理在命令执行以下命令mvn jasypt:encrypt -Djasypt.encryptor.passwordafx11此时再看配置文件中的conf.password数据已经变为jasypt.encryptor.passwordafx11
conf.url127.0.0.1
conf.passwordENC(209eBdF3jsV2f8kDjs4NOCzgBxnVgETlR5q2KfhYo5DW2jqvLknv0TndEkXOXm0)注意原来的DEC变成了ENC原来的明文密码变成了加密的密文。此时如果想查看明文执行以下命令即可mvn jasypt:decrypt -Djasypt.encryptor.passwordafx11该命令不会修改配置文件中的密文为明文只会在控制台进行明文结果的输出。jasypt.encryptor.passwordafx11
conf.url127.0.0.1
conf.passwordDEC(admin123)经过上述操作所有改造步骤已经完成只需启动系统进行验证即可。密码的传递方式完成上述步骤直接启动系统访问对应的请求会发现已经能够成功打印出密码原文了。上述实例中我们将加密的密码放在了application.properties文件中这样并不安全如果查看代码就知道如何解密了。通常还可以采用另外一种形式来传递参数在启动命令中传输密码。比如java -jar jasypt-spring-boot-demo-0.0.1-SNAPSHOT.jar --jasypt.encryptor.passwordpassword这样密码便不用存储在代码当中了一定程度上增加了安全性。当然也可以通过环境变量来进行传递这样即便开发人员也无法获得生产的密码。小结 关于Jasypt的使用及与Spring Boot的集成就讲这么多更多内容也可参考官方文档说明。如果你的项目中还存在很多明文存储的密码真的有必要考虑使用类似的框架进行加密处理了。示例源码地址https://github.com/secbr/springboot-all/tree/master/springboot-jasypt官方源码地址https://github.com/ulisesbocchio/jasypt-spring-boot往期推荐MyBatis 批量插入数据的 3 种方法40 个 SpringBoot 常用注解让生产力爆表聊聊Spring事务失效的12种场景太坑了再见 Spring Task这个定时任务框架真香