如何保护 SpringBoot 配置文件中的敏感信息

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

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


1. 引入包

查看最新版本可以到:

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

com.github.ulisesbocchio

jasypt-spring-boot-starter

2.1.0

2. 配置加/解的密码

# jasypt加密的密匙

jasypt:

encryptor:

password: Y6M9fAJQdU7jNp5MW

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

@RunWith(SpringRunner.class)

@SpringBootTest

public class DatabaseTest {

@Autowired

private StringEncryptor encryptor;

@Test

public 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: update

show-sql: true

# 返回的api接口的配置,全局有效

jackson:

# 如果某一个字段为null,就不再返回这个字段

default-property-inclusion: non_null

date-format: yyyy-MM-dd HH:mm:ss

serialization:

write-dates-as-timestamps: false

time-zone: GMT+8

# jasypt加密的密匙

jasypt:

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。
A基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料**

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值