今日推荐

Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性能无敌,横扫所有对手.....这玩意比ThreadLocal叼多了,吓得我赶紧分享出来。

来源:blog.csdn.net/jeikerxiao/article/details/96480136

说明

使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。

打开application.propertiesapplication.yml,比如 MySql登陆密码,Redis登陆密码以及第三方的密钥等等一览无余,这里介绍一个加解密组件,提高一些属性配置的安全性。

jasypt由一个国外大神写了一个springboot下的工具包,用来加密配置文件中的信息。

GitHub Demo地址

https://github.com/jeikerxiao/spring-boot2/tree/master/spring-boot-encrypt

数据用户名和数据库密码加密为例

1. 引入包

查看最新版本可以到:

https://github.com/ulisesbocchio/jasypt-spring-boot

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.0</version>
</dependency>

2. 配置加/解的密码

# jasypt加密的密匙
jasypt:encryptor:password: Y6M9fAJQdU7jNp5MW

3. 测试用例中生成加密后的秘钥

@RunWith(SpringRunner.class)
@SpringBootTest
public class DatabaseTest {@Autowiredprivate StringEncryptor encryptor;@Testpublic void getPass() {String url = encryptor.encrypt("jdbc:mysql://localhost:3306/mydb?autoReconnect=true&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");String name = encryptor.encrypt("root");String password = encryptor.encrypt("123456");System.out.println("database url: " + url);System.out.println("database name: " + name);System.out.println("database password: " + password);Assert.assertTrue(url.length() > 0);Assert.assertTrue(name.length() > 0);Assert.assertTrue(password.length() > 0);}
}

下面是输出加密字符串:

database url: 6Ut7iADnHS18cManoFJuNRQ5QEDfcho/F96SOhsHZdXlHYCa5PSrz6rk48I9eHB7qPp5AxDFBk9xi0I1hi6BJ0DSPYA9443gBAk5JDUxDufjUKsdh6knZJLNELmFJzYrDvCu4S0x22MYdZqJDLbyDUU2JcoezCvs156vmsPgU4A=
database name: fmai72yGYKGlP6vTtX77EQ==
database password: GPMG7FGV+EA9iGkC27u67A==

4. 将加密后的字符串替换原明文

applicatioin.yml

server:port: 8080
spring:# 数据库相关配置datasource:driver-class-name: com.mysql.cj.jdbc.Driver# 这里加上后缀用来防止mysql乱码,serverTimezone=GMT%2b8设置时区url: ENC(h20YiPrvNnuuTGjlrE1RVpudMuIQAS6ZPSVo1SPiYVyLen7/TWI5rXVRkStA3MDcoVHQCmLa70wYU6Qo8wwtnsmaXa5jykD3MNhAp5SGJxHsTG5u7tflPdnNmOufyhdsYPxBGWAgibYs9R7yBfrvtwBTRbe096APd3bnG3++Yro=)username: ENC(sT6BztXbJEa71eg3pPGYMQ==)password: ENC(MpSZFJ9ftq+3+VUANZjr0Q==)jpa:hibernate:ddl-auto: updateshow-sql: true# 返回的api接口的配置,全局有效jackson:# 如果某一个字段为null,就不再返回这个字段default-property-inclusion: non_nulldate-format: yyyy-MM-dd HH:mm:ssserialization:write-dates-as-timestamps: falsetime-zone: GMT+8
# jasypt加密的密匙
jasypt:encryptor:password: Y6M9fAJQdU7jNp5MW

注意: 上面的 ENC() 是固定写法.

附言

部署时配置salt(盐)值

为了防止salt(盐)泄露,反解出密码.可以在项目部署的时候使用命令传入salt(盐)值:

java -jar xxx.jar  -Djasypt.encryptor.password=Y6M9fAJQdU7jNp5MW

或者在服务器的环境变量里配置,进一步提高安全性。学习资料:Java进阶视频资源

打开/etc/profile文件

vim /etc/profile

在profile文件末尾插入salt(盐)变量

export JASYPT_PASSWORD = Y6M9fAJQdU7jNp5MW

编译,使配置文件生效

source /etc/profile

运行

java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar
推荐文章
1、一款高颜值的 SpringBoot+JPA 博客项目2、超优 Vue+Element+Spring 中后端解决方案3、推荐几个支付项目!4、推荐一个 Java 企业信息化系统5、一款基于 Spring Boot 的现代化社区(论坛/问答/社交网络/博客)

如何保护 SpringBoot 配置文件中的敏感信息相关推荐

  1. Springboot加密配置文件中的敏感信息(ps:数据库密码)的方法

    SpringBoot配置文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysql登陆密码,redis登陆密 ...

  2. Springboot项目使用jasypt加密配置文件中的敏感信息

    目录 目录 项目背景 需求 jasypt简介 使用 0,版本对应关系 1,引入依赖 2,启用加密 2.1,在启动类上配置注解 2.2,启用注解扫描和@Configuration配置 2.3,只针对指定 ...

  3. Spring Boot 配置中的敏感信息如何保护?

    在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种细节用法,比如:参数间的引用.随机数的应用.命令行参数的使用.多环境的配置管理等等. 这些配置相关的知识都是Sprin ...

  4. 血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息

    在JavaScript文件中存储敏感数据,不仅是一种错误的实践方式,而且还是一种非常危险的行为,长期以来大家都知道这一点. 而原因也非常简单,我们可以假设你为你的用户动态生成了一个包含API密钥的Ja ...

  5. java如何取到配置文件中值,从配置文件中获取配置信息的几种方法

    1.利用ResourceBundle类从properties文件中获取配置信息 创建配置文件并写入配置信息 image.png 使用以下代码可以轻松获取配置信息 package com.course. ...

  6. git bfg 的使用(删除提交记录中的敏感信息,删除文件等)

    前言 使用 Git 的过程中,我们有可能会误提交一些敏感信息(密钥,个人隐私)或无用文件等到远程仓库.这时我们需要清理相关的数据,直接在文件中删除敏感信息再提交,虽然仓库中没有了敏感信息,但是在提交历 ...

  7. ArcIMS 投影问题 如何向地图配置文件中添加投影信息(转载)

    ArcIMS 投影问题 如何向地图配置文件中添加投影信息 编号: 000181 相关产品及版本: ArcIMS  3.1, 4.0,9.0 平台: N/A 提交时间: 2004-12-15   修改时 ...

  8. SpringBoot配置文件中spring.profiles.active配置详解

    SpringBoot配置文件中spring.profiles.active配置详解 1.多环境配置 我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发.测 ...

  9. JS文件中的敏感信息+swagger接口测试

    01 JS中的敏感信息 实战中会经常遇到很多js文件,在js文件中很可能会遇到一些敏感信息和路径之类的,遇到路径可以尝试拼接,有可能会遇到未授权的情况等等,也有很多站点是webpack打包,可以F12 ...

最新文章

  1. 暂时无法登陆GOOGLE,却依然可以用GOOGLE搜索--更多GOOGLE入口
  2. 【正一专栏】内马尔要走快走、走好不送!
  3. CTF(pwn)-格式化字符串漏洞讲解(一)
  4. Spring中bean的作用域
  5. python 列表 字典 读写文件:pickle模块的基本使用
  6. java派生类_我可以使派生类从Java的基类继承派生成员...
  7. git 每次都要输入用户名密码_Git向GitHub提供代码
  8. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法
  9. 软件portable
  10. 【leetcode】332. Reconstruct Itinerary
  11. Linux服务器挂载ntfs移动硬盘
  12. 深入学习Java虚拟机(三)
  13. vs插件VS10x CodeMap 注册码
  14. thinkphp5微信公众号支付
  15. 计算机台式电源3c号,3C认证和电脑电源有什么关系呢 其实很重要
  16. pytorch绘制loss和accuracy曲线
  17. 什么是Vue全家桶,Vue全家桶包含哪些东西以及怎么使用
  18. Java 程序员,年薪 40W 需要什么水平?
  19. 数学与泛型编程(6)编程的基本概念
  20. 会计 制造费用转生产成本

热门文章

  1. 随机取6位数字或字母方法
  2. oracle 表空间维护
  3. 将Sublime Text 2搭建成一个好用的IDE
  4. 【转】C#正则表达式小结
  5. 低功耗稳压芯片HT7333、HT7333-A
  6. poi excel mysql_java的poi技术读取Excel数据到MySQL
  7. Boost Asio总结(3)异步通信
  8. C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset操作
  9. Docker (1)简介
  10. 【Flask】自定义转换器