使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。打开application.properties或application.yml,比如mysql登陆密码,redis登陆密码以及第三方的密钥等等一览无余,这里介绍一个加解密组件,提高一些属性配置的安全性。

jasypt由一个国外大神写的一个springboot下的工具包。Git地址:https://github.com/ulisesbocchio/jasypt-spring-boot

直接上代码:

1、pom文件中增加依赖:

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

2、application.yml文件中增加jasypt的秘钥(该秘钥自定义的):

jasypt:
encryptor:
#加密秘钥
password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

3、测试类:

@RestController
public class IndexController { @Autowired
private StringEncryptor encryptor; /**
* 测试jasypt加密解密
*/
@GetMapping("/jasypt")
public void testJasypt() {
String password = "";
String encryptPwd = encryptor.encrypt(password);
System.out.println("加密::" + encryptPwd);
System.out.println("解密:" + encryptor.decrypt(encryptPwd));
} }

4、启动服务,在控制台可以看到jaspyt的默认配置(比如加密方式是PBEWithMD5AndDES):

5、在浏览器请求(端口号自定义):http://localhost:18081/jasypt ,在控制台打印信息:

加密: stqvirrvG8TcLz9mqflBDQ==
解密:

jasypt由于其使用的是PBEWithMD5AndDES加密方式,所以每次加密出来的结果都不一样,但是解密都是一样的,所以很适合对数据进行加密

6、将加密的结果替换配置文件中的敏感字段(这里以数据库密码为例,数据库密码是123456):

spring:
application:
name: service-provider
datasource:
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/mydb?autoReconnect=true&failOverReadOnly=false&createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=utf8
username: root
password: ENC(stqvirrvG8TcLz9mqflBDQ==)

上面的 ENC()是固定写法,()里面是加密后的信息。

7、在测试类中增加代码:

    @Value("${spring.datasource.password}")
private String dbPassword; // 数据库密码 /**
* 测试配置文件字段加密后,项目中该字段的值
*/
@GetMapping("/password")
public String password() {
return dbPassword;
}

请求http://localhost:18081/password,会发现结果是123456,说明直接将加密文件解密出来了

扩展

a、自定义上面第6点中ENC()的固定写法。在配置文件中增加jasypt.encryptor.property:

jasypt:
encryptor:
#加解密秘钥
password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7
#设置前缀后缀
property:
prefix: "ENC@["
suffix: "]"

b、将加解密秘钥放在配置文件中是不安全的,有如下几种解决办法:

1、在启动类上赋值秘钥:

@SpringBootApplication
public class ProviderApplication { public static void main(String[] args) {
/** 配置加解密秘钥,与配置文件的密文分开放 */
System.setProperty("jasypt.encryptor.password", "travel-app");
// System.setProperty("jasypt.encryptor.password", "EbfYkitulv73I2p0mXI50JMXoaxZTKJ7"); SpringApplication.run(ProviderApplication.class, args);
} }

2、自定义StringEncryptor:

/**
* 配置StringEncryptor
*/
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword("EbfYkitulv73I2p0mXI50JMXoaxZTKJ7");
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("");
config.setPoolSize("");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.salt.NoOpIVGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}

3、使用jar的方式启动

踩过的坑

a、必须配置加解密用的秘钥,即jasypt.encryptor.password,不然启动会报错

b、springboot2.x以下的版本,只能用jasypt1.x的版本。如果用jasypt2.x的版本,启动会报错,详见https://github.com/ulisesbocchio/jasypt-spring-boot/issues/97

SpringBoot配置文件敏感信息加密-jasypt的更多相关文章

  1. Spring Boot: 加密应用配置文件敏感信息

    Spring Boot: 加密应用配置文件敏感信息 背景 我们的应用之前使用的是Druid数据库连接池,由于需求我们迁移到HikariCP连接池,druid 数据源加密提供了多种方式: 可以在配置文件 ...

  2. Java开发小技巧(四):配置文件敏感信息处理

    前言 不知道在上一篇文章中你有没有发现,jdbc.properties中的数据库密码配置是这样写的: jdbc.password=5EF28C5A9A0CE86C2D231A526ED5B388 其实 ...

  3. 解决spring-boot配置文件使用加密方式保存敏感数据启动报错No decryption for FailsafeTextEncryptor. Did you configure the keystore correctly

    spring-boot配置文件使用加密方式保存敏感数据 application.yml spring: datasource: username: dbuser password: '{cipher} ...

  4. springboot配置文件中使用当前配置的变量

    在开发中,有时我们的application.properties某些值需要重复使用,比如配置redis和数据库或者mongodb连接地址,日志,文件上传地址等,且这些地址如果都是相同或者父路径是相同的 ...

  5. SpringBoot 配置文件存放位置及读取顺序

    SpringBoot配置文件可以使用yml格式和properties格式 分别的默认命名为:application.yml.application.properties 存放目录 SpringBoot ...

  6. [SpringBoot] - 配置文件的多种形式及JSR303数据校验

    Springboot配置文件: application.yml   application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...

  7. 将springboot配置文件中的值注入到静态变量

    SpringBoot配置文件分为.properties和.yml两种格式,根据启动环境的不同获取不同环境的的值. spring中不支持直接注入静态变量值,利用spring的set注入方法注入静态变量 ...

  8. SpringBoot配置文件 application.properties详解

    SpringBoot配置文件 application.properties详解   本文转载:https://www.cnblogs.com/louby/p/8565027.html 阅读过程中若发现 ...

  9. Spring-Boot配置文件数据源配置项

    Spring-Boot配置文件数据源配置项(常用配置项为红色) 参数 介绍 spring.datasource.continue-on-error = false 初始化数据库时发生错误时,请勿停止 ...

随机推荐

  1. make 命令出现:"make:*** No targets specified and no makefile found.Stop."

    我们在Linux 安装包的时候,使用make 命令出现:"make:*** No targets specified and no makefile found.Stop."这样的 ...

  2. LightOJ - 1333 - Grid Coloring

    链接: https://vjudge.net/problem/LightOJ-1333 题意: You have to color an M x N two dimensional grid. You ...

  3. The BEST way for YOU to learn English,https://www.youtube.com/watch?v=508wFMG9ZP4

    opportunityoppositeappreciatesappropriate.approximate.approachcan't.seriesseriouscommon prettycasual ...

  4. SpringBoot-设置定时任务

    @Scheduled为设置定时任务的注解. 参数常用的为两种: 第一种是fixedRate,表示以一种固定频率去执行,单位为毫秒:例如@Scheduled(fixedRate = 5000)  表示为 ...

  5. BZOJ 5082: 弗拉格 矩阵乘法

    如果单点而不是求 sigma 的话还是比较好办的. 遇到这种前缀和相减的矩阵乘法可以增设一个 0 使得后面的能先加到前面,然后再算. 这样的话可以使的最后算出的是前缀和相加的形式. code: #in ...

  6. 文件搜索命令find

    1.路径加文件名搜索(find): 查找的是etc目录下的以init为名字的文件. 加通配符后为模糊搜索,只要文件名中含有init即可. 查找etc目录下以init开头的七位文件名. 2.搜索时不区分 ...

  7. 3-ESP8266 SDK开发基础入门篇--点亮一个灯

    https://www.cnblogs.com/yangfengwu/p/11072834.html 所有的源码 https://gitee.com/yang456/Learn8266SDKDevel ...

  8. 漏斗分析(Funnel Analysis)

    什么是漏斗分析? 简单来讲,就是抽象出某个流程,观察流程中每一步的转化与流失. 漏斗的三个要素: 时间:特指漏斗的转化周期,即为完成每一层漏斗所需时间的集合 节点:每一层漏斗,就是一个节点 流量:就是 ...

  9. POJ 1741.Tree and 洛谷 P4178 Tree-树分治(点分治,容斥版) +二分 模板题-区间点对最短距离<=K的点对数量

    POJ 1741. Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 34141   Accepted: 11420 ...

  10. [JLOI 2015]骗我呢

    传送门 Description 求给\(n*m\)的矩阵填数的方案数 满足: \[ 1\leq x_{i,j}\leq m \] \[ x_{i,j}<x_{i,j+1} \] \[ x_{i, ...