文章目录

  • 前言
  • 解决思路
  • 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配置文件加密详解相关推荐

  1. creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器

    Spring Boot的配置详解 在本节中,我们将重点聚焦在Spring Boot的配置方面. 理解Spring Boot的自动配置 按照"约定大于配置"的原则,Spring Bo ...

  2. SpringBoot异常处理ErrorController详解

    文章目录 一.背景 二.SpringBoot的默认异常处理BasicErrorController 三.自定义错误异常 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考 ...

  3. SpringBoot的配置详解application

    SpringBoot的配置文件application有两种文件格式,两种配置的内容是一致的,只是格式不一致. 1.application.properties 2.application.yml或者a ...

  4. springboot+jsp中文乱码_【spring 国际化】springMVC、springboot国际化处理详解

    在web开发中我们常常会遇到国际化语言处理问题,那么如何来做到国际化呢? 你能get的知识点? 使用springgmvc与thymeleaf进行国际化处理. 使用springgmvc与jsp进行国际化 ...

  5. SpringBoot yaml语法详解

    SpringBoot yaml语法详解 1.yaml基本语法 2.yaml给属性赋值 3.JSR303校验 4.SpringBoot的多环境配置 1.yaml基本语法 通常情况下,Spring Boo ...

  6. mysql数据库表添加加密密码_数据库账号密码加密详解及实例

    数据库账号密码加密详解及实例 数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为sp ...

  7. 第七章httpd.conf主配置文件的详解

    版本V1.0 时间2012-10-04 版权GPL 作者itnihao 邮箱 itnihao@qq.com 博客 http://itnihao.blog.51cto.com 如需重新发行,请注明以上信 ...

  8. Apache2 httpd.conf配置文件中文版详解

    Apache2 httpd.conf配置文件中文版详解 # # 基于 NCSA 服务的配置文件. # #这是Apache服务器主要配置文件. #它包含服务器的影响服务器运行的配置指令. #参见< ...

  9. AES加密 — 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120285594 本文出自[赵彦军的博客] 文章目录 推荐 AES 简介 对称加密 ...

  10. ssh2的application.xml配置文件配置详解

    ssh2的application.xml配置文件配置详解 1.导入其他的配置文件.在ssh项目中可以导入其他的配置文件,导入的格式为: <import resource="classp ...

最新文章

  1. 【转】【VC】VC程序运行时间测试函数
  2. Luogu5369 [PKUSC2018]最大前缀和
  3. Web应用中的缓存一致性问题
  4. 循环神经网络教程4-用Python和Theano实现GRU/LSTM RNN, Part 4 – Implementing a GRU/LSTM RNN with Python and Theano
  5. java cpu监控,java系统监控CPU 磁盘
  6. 解决VS2013调试ASP.NET中无法调试的问题:当前不会命中断点。在 XXXX.dll 中找到了 XXX.cs 的副本,但是当前源代码与 XXXX.dll 中内置的版本不同。...
  7. memmove()/mmecpy()
  8. TensorFlow语义分割套件开源了ECCV18旷视科技BiSeNet实时分割算法
  9. Visual Studio.NET 无法创建或打开应用程序之解决方法
  10. Reading Thinking in Java #3
  11. Oracle数据库基本知识
  12. 绕过卡巴斯基通过RPC控制lsass注入DLL
  13. bertram_Bertram
  14. caffe学习系列:网络融合
  15. CycleGAN的测试
  16. 孤尽训练营打卡日记day17--面向对象
  17. 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)
  18. 你长痘吗?留下痘印吗?民间秘方
  19. 关于go命令下载工具终端提示找不到工具
  20. Lyft开源L5无人车数据集:55000个3D注释框架,还有空间语义地图

热门文章

  1. c语言 calloc ,realloc 的使用
  2. 游戏中的角色是如何“动”起来的?
  3. ML:可解释性之SHAP值的公式推导(基于原论文利用树类模型的Tree SHAP公式推导)之详细攻略
  4. 如何用photoshop调出梦幻冷色调
  5. mysql implode_PHP implode() 函数
  6. php implode key,PHP implode()用法及代碼示例
  7. html 套壳成桌面应用
  8. 中国天气预报数据API收集
  9. 从零开始ming的多人联机游戏(3)为socket通讯添加mysql数据库
  10. easyui是怎么实现批量删除的_怎么批量删除空间说说-easyui的datagrid实现批量删除...