【开发经验】springboot配置文件加密详解
文章目录
- 前言
- 解决思路
- jasypt原理
前言
一般情况下,为了方便切换环境,我们会将关于环境的信息存放在配置文件中,例如mysql的账号密码,redis的账号密码,支付宝、微信的密钥等等。
这些信息是极为敏感的信息,一旦泄露,会造成很大的损失。因此,一般开发者会将配置文件中进一步加密,避免这些敏感信息让不法分子直接获取。
解决思路
在springboot工程中,实现配置文件的加密十分简单,只需要引入jasypt
的jar包就可以。
引入jar
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.0.0</version>
</dependency>
引入之后,通过工具类计算密文。
public class JasyptUtils
{/*** Jasypt生成加密结果** @param password 配置文件中设定的加密密码 jasypt.encryptor.password* @param value 待加密值* @return*/public static String encryptPwd (String password, String value){PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor ();encryptOr.setConfig (cryptOr (password));String result = encryptOr.encrypt (value);return result;}/*** 解密** @param password 配置文件中设定的加密密码 jasypt.encryptor.password* @param value 待解密密文* @return*/public static String decyptPwd (String password, String value){PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor ();encryptOr.setConfig (cryptOr (password));String result = encryptOr.decrypt (value);return result;}/*** @param password salt* @return*/public static SimpleStringPBEConfig cryptOr (String password){SimpleStringPBEConfig config = new SimpleStringPBEConfig ();config.setPassword (password);config.setAlgorithm (StandardPBEByteEncryptor.DEFAULT_ALGORITHM);config.setKeyObtentionIterations ("1000");config.setPoolSize ("1");config.setProviderName (null);config.setSaltGeneratorClassName ("org.jasypt.salt.RandomSaltGenerator");config.setStringOutputType ("base64");return config;}public static void main (String[] args){// 加密// 盐值替换成自己熟悉的口令,此口令为解密密钥,需要妥善保管。System.out.println (encryptPwd ("yanzhi", "root"));System.out.println (encryptPwd ("yanzhi", "123456"));}
输出:
uzL6GFC8aJustxilk9pY5Q==
Bs8ZOkgf6tKD7PWKcl6RzQ==
在main方法中修改自己熟悉的口令和密文即可。最后将输出的值替换在配置文件中,通过ENC()
进行包裹。例如:ENC(uzL6GFC8aJustxilk9pY5Q==)
。
最后替换配置文件的信息即可。配置文件要添加密钥。yanzhi
可以自行修改。
jasypt:encryptor:password: yanzhi
mysql的账号密码可以为
username: ENC(sdasdQSDQWFSADS==)
jasypt原理
此加密的原理非常简单。众所周知,spring在读取配置文件之后,生成bean之前会生成BeanDefinition
,jasypt的加密原理就是生成BeanDefinition
之后,对BeanDefinition
中的信息进行了修改,将其密文进行转换。核心类在EnableEncryptablePropertiesBeanFactoryPostProcessor
中。
public class EnableEncryptablePropertiesBeanFactoryPostProcessor implements BeanFactoryPostProcessor, ApplicationListener<ApplicationEvent>, Ordered {private static final Logger LOG = LoggerFactory.getLogger(EnableEncryptablePropertiesBeanFactoryPostProcessor.class);private ConfigurableEnvironment environment;private InterceptionMode interceptionMode;@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {//此处是将密文还原为明文的逻辑LOG.info("Post-processing PropertySource instances");EncryptablePropertyResolver propertyResolver = beanFactory.getBean(RESOLVER_BEAN_NAME, EncryptablePropertyResolver.class);MutablePropertySources propSources = environment.getPropertySources();convertPropertySources(interceptionMode, propertyResolver, propSources);}
}
当看到此类实现了BeanFactoryPostProcessor
类的时候,这个加密解密的思路就很明显了。因为spring提供了BeanFactoryPostProcessor
接口里面有postProcessBeanFactory
方法,此方法是用来在spring创建BeanDefinition
之后,提供对BeanDefinition
内的信息进行修改。
【开发经验】springboot配置文件加密详解相关推荐
- creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器
Spring Boot的配置详解 在本节中,我们将重点聚焦在Spring Boot的配置方面. 理解Spring Boot的自动配置 按照"约定大于配置"的原则,Spring Bo ...
- SpringBoot异常处理ErrorController详解
文章目录 一.背景 二.SpringBoot的默认异常处理BasicErrorController 三.自定义错误异常 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考 ...
- SpringBoot的配置详解application
SpringBoot的配置文件application有两种文件格式,两种配置的内容是一致的,只是格式不一致. 1.application.properties 2.application.yml或者a ...
- springboot+jsp中文乱码_【spring 国际化】springMVC、springboot国际化处理详解
在web开发中我们常常会遇到国际化语言处理问题,那么如何来做到国际化呢? 你能get的知识点? 使用springgmvc与thymeleaf进行国际化处理. 使用springgmvc与jsp进行国际化 ...
- SpringBoot yaml语法详解
SpringBoot yaml语法详解 1.yaml基本语法 2.yaml给属性赋值 3.JSR303校验 4.SpringBoot的多环境配置 1.yaml基本语法 通常情况下,Spring Boo ...
- mysql数据库表添加加密密码_数据库账号密码加密详解及实例
数据库账号密码加密详解及实例 数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为sp ...
- 第七章httpd.conf主配置文件的详解
版本V1.0 时间2012-10-04 版权GPL 作者itnihao 邮箱 itnihao@qq.com 博客 http://itnihao.blog.51cto.com 如需重新发行,请注明以上信 ...
- Apache2 httpd.conf配置文件中文版详解
Apache2 httpd.conf配置文件中文版详解 # # 基于 NCSA 服务的配置文件. # #这是Apache服务器主要配置文件. #它包含服务器的影响服务器运行的配置指令. #参见< ...
- AES加密 — 详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120285594 本文出自[赵彦军的博客] 文章目录 推荐 AES 简介 对称加密 ...
- ssh2的application.xml配置文件配置详解
ssh2的application.xml配置文件配置详解 1.导入其他的配置文件.在ssh项目中可以导入其他的配置文件,导入的格式为: <import resource="classp ...
最新文章
- 【转】【VC】VC程序运行时间测试函数
- Luogu5369 [PKUSC2018]最大前缀和
- Web应用中的缓存一致性问题
- 循环神经网络教程4-用Python和Theano实现GRU/LSTM RNN, Part 4 – Implementing a GRU/LSTM RNN with Python and Theano
- java cpu监控,java系统监控CPU 磁盘
- 解决VS2013调试ASP.NET中无法调试的问题:当前不会命中断点。在 XXXX.dll 中找到了 XXX.cs 的副本,但是当前源代码与 XXXX.dll 中内置的版本不同。...
- memmove()/mmecpy()
- TensorFlow语义分割套件开源了ECCV18旷视科技BiSeNet实时分割算法
- Visual Studio.NET 无法创建或打开应用程序之解决方法
- Reading Thinking in Java #3
- Oracle数据库基本知识
- 绕过卡巴斯基通过RPC控制lsass注入DLL
- bertram_Bertram
- caffe学习系列:网络融合
- CycleGAN的测试
- 孤尽训练营打卡日记day17--面向对象
- 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)
- 你长痘吗?留下痘印吗?民间秘方
- 关于go命令下载工具终端提示找不到工具
- Lyft开源L5无人车数据集:55000个3D注释框架,还有空间语义地图
热门文章
- c语言 calloc ,realloc 的使用
- 游戏中的角色是如何“动”起来的?
- ML:可解释性之SHAP值的公式推导(基于原论文利用树类模型的Tree SHAP公式推导)之详细攻略
- 如何用photoshop调出梦幻冷色调
- mysql implode_PHP implode() 函数
- php implode key,PHP implode()用法及代碼示例
- html 套壳成桌面应用
- 中国天气预报数据API收集
- 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库
- easyui是怎么实现批量删除的_怎么批量删除空间说说-easyui的datagrid实现批量删除...