昆明建设公司网站,win主机安装wordpress,好久不见在线观看免费高清,网站建设优化及推广1. 背景
基于Springboot的工程项目#xff0c;通常很多信息都是在application.yml中直接明文配置的#xff0c;比如数据库链接信息#xff0c;redis链接信息等#xff1b;
为了安全考虑#xff0c;公司打算将yml配置文件中的数据库连接信息的账号#xff0c;密码进行加…1. 背景
基于Springboot的工程项目通常很多信息都是在application.yml中直接明文配置的比如数据库链接信息redis链接信息等
为了安全考虑公司打算将yml配置文件中的数据库连接信息的账号密码进行加密
公司有开发相关的安全规定要求对源代码工程中所有的敏感信息进行加密包括代码和配置文件防止密码泄露
实际上没太大必要——咋办呢有专员检查做还是得做
2. 方案
初步想了下方案有2种
1依赖配置中心
一般来说配置中心实现了业务配置的在线管理能实时查看修改业务配置不需要重启项目
其原理是维护本地和远程配置中心的长连接本地监听远程配置的变更刷新本地配置的缓存
常见的有nacos、apollo之类的
2基于Springboot框架
在spring工程启动时会读取yml文件中的配置到配置对象中在这一步可以切入引入加解密工具库
实际上刚好有这么一个常用的库来解决这个问题——Jasypt这个库为我们解决了这个问题实现了springboot配置的自定加密加密
本次由于工程是轻量级未使用远程配置中心中间件因此为了快速解决问题使用轻量级的方案——即引入Jasypt对yml配置加密
3. Maven引入本地二方包
在准备使用Jasypt时去maven仓库搜索maven坐标发现公司的仓库并没有引入这个包需要自己去公网公网下载Jasypt库相关的jar包
所以先要解决的问题是——如何在maven工程中引入本地二方包
方案可以参考
这里简单描述下步骤
1去外网下载jar包在resource下新建lib文件夹复制“xx.jar” 2在pom.xml引入依赖把地址替换成本地的jar包文件相对地址 3在Maven打包插件处进行配置允许本地系统的二方包 configuration!--允许导入本地二方包--includeSystemScopetrue/includeSystemScopeexecutabletrue/executable/configuration
成功引入后编译工程可以通过maven helper查看到相关依赖已经引入如下 注意网上搜到的引入包仅包含但是发现其依赖的包仍然不在公司仓库里所以需要层层把仓库里不存在的包都引入所以这里引入了3个包其他的如spring-framework相关的包公司仓库已经有了所以无需手动引入
4. Springboot引入Jasypt对yml配置加密
网上搜了很多方法都走不通所以这里还是完整的记录下步骤亲测能通
1引入jar包 !--本地二方包jasypt--dependencygroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-spring-boot-stater/artifactIdversion2.1.0/versionscopesystem/scopesystemPath${project.basedir}/src/main/resources/lib/jasypt-spring-boot-starter-2.1.0.jar/systemPath/dependencydependencygroupIdcom.github.ulisesbocchio/groupIdartifactIdjasypt-spring-boot/artifactIdversion2.1.0/versionscopesystem/scopesystemPath${project.basedir}/src/main/resources/lib/jasypt-spring-boot-2.1.0.jar/systemPath/dependencydependencygroupIdorg.jasypt/groupIdartifactIdjasypt/artifactIdversion1.9.2/versionscopesystem/scopesystemPath${project.basedir}/src/main/resources/lib/jasypt-1.9.2.jar/systemPath/dependency
2写测试类生成数据库密码明文对应的密码 Testpublic void testEncrypt() {StandardPBEStringEncryptor standardPBEStringEncryptor new StandardPBEStringEncryptor();EnvironmentPBEConfig config new EnvironmentPBEConfig();config.setAlgorithm(PBEWithMD5AndDES);config.setPassword(my-encryptor);standardPBEStringEncryptor.setConfig(config);String plainText ab123;String encryptedText standardPBEStringEncryptor.encrypt(plainText);System.out.println(encryptedText);}
3写测试类测下解密 Testpublic void testDecrypt() {StandardPBEStringEncryptor standardPBEStringEncryptor new StandardPBEStringEncryptor();EnvironmentPBEConfig config new EnvironmentPBEConfig();config.setAlgorithm(PBEWithMD5AndDES);config.setPassword(my-encryptor);standardPBEStringEncryptor.setConfig(config);String encryptedText JD1Ez9hxgHXNpIj4E......;String plainText standardPBEStringEncryptor.decrypt(encryptedText);System.out.println(plainText);}
4yml配置替换成密文使用ENC(*)包裹 5启动服务测试数据库连接 注意尽量使用2.X低版本的Jasypt依赖因为博主在使用3.x的版本时启动遇到了各种疑难杂症所以如果不是有特殊要求仅仅是解决加密问题就尽量使用2.X版本 参考文章
maven工程引用仓库中没有的包
手动导入Maven库中不存在的jar包并整合打包
对spring boot yml配置文件敏感信息加密处理的两种方式
如何给yml配置文件的密码加密(SpringBoot)