美文网首页
SpringBoot 整合 Jasypt 给配置文件中的敏感信息

SpringBoot 整合 Jasypt 给配置文件中的敏感信息

作者: 程就人生 | 来源:发表于2022-07-03 09:54 被阅读0次

在做项目的时候,我们经常看到配置文件中的密码等敏感字段在裸奔,有没有什么办法做一下加密工作呢?jasypt-spring-boot刚好解决这个问题,下面就来看看,它是怎么使用的吧!

首先,在pom.xml文件中引入jasypt-spring-boot包;

<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot</artifactId>
    <version>3.0.4</version>
</dependency>

如果项目里已经有别的starter,那么就可以直接引入上面的包,否则请引入带starter的jasypt包。

<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

第二步,在启动类上增加注解:@EnableEncryptableProperties,开启配置文件字段的加密;

第三步,application.properties配置文件中加入加密密钥和解密前后缀标识;

// 加密秘钥
jasypt.encryptor.password=CodeSheep
// 解密标识
jasypt.encryptor.property.prefix=ENC@[
jasypt.encryptor.property.suffix=]

// 需要加密的字段
spring.datasource.password=123456

第四,加入测试代码,为了方便我们直接在启动类里加测试代码;

@Autowired
private ApplicationContext applicationContext;

@Autowired
private StringEncryptor stringEncryptor;
    
@Override
public void run(String... args) throws Exception {
   Environment environment = applicationContext.getBean(Environment.class);
     
   // 首先获取配置文件里的原始明文信息
   String mysqlOriginPswd = environment.getProperty("spring.datasource.password");
   // 加密
   String mysqlEncryptedPswd = encrypt( mysqlOriginPswd );

   // 打印加密前后的结果对比 123456
   System.out.println( "原始明文密码为:" + mysqlOriginPswd );
   System.out.println( "====================================" );
   // puUbA77wheMabQm0mY3mzESwN0loXqh5M2fCVhKIWEsTvY1JjXMAi8YEYKNFiObp
   System.out.println( "原始明文密码加密后的结果为:" + mysqlEncryptedPswd );
}

/**
* 对字符串进行加密
* @paramoriginPassord
* @return
*/
private String encrypt(String originPassord) {
        String encryptStr = stringEncryptor.encrypt(originPassord);
    return encryptStr;
}

/**
* 对加过密的密文进行解密
* @paramencryptedPassword
* @return
*/
private String decrypt(String encryptedPassword) {
        String decryptStr = stringEncryptor.decrypt(encryptedPassword);
    return decryptStr;
}  

通过StringEncryptor的encrypt方法进行加密,再通过decrypt方法进行解密。第五,运行启动类,获取加密过的密文,并放到application配置文件中

找到要替换的明文,并用加密前后缀标识包裹,替换原来的明文;

spring.datasource.password=ENC@[2c+NWn5q/sfAGm8RtnjcWzJEj8RMmgcim5UKkHD4PKjG/WqMBFbTU6ChW9CnFhGn]

调整代码,在启动类里获取加密过后的密码,看看能否正常解密,以保证正常使用。


第六步,重新启动主类运行代码测试,运行结果如下图所示:

加密使用的密钥放在配置文件里也不安全,别人拿到了它就可以解码出明文;可以在项目上线后,将密钥以命令行参数的形式传入,这也是保密的一种途径。除此之外,你还有其他更好的办法吗?

最后总结

通过这个demo可以看到使用jasypt-spring-boot架包对配置文件里的敏感字段有选择性的加密,执行起来非常简单。这里抛砖引玉只讲简单使用,如果有时间可以继续研究它的源码,看看它们是怎么实现的。怎么样,这个简单的demo你学会了吗?

相关文章

网友评论

      本文标题:SpringBoot 整合 Jasypt 给配置文件中的敏感信息

      本文链接:https://www.haomeiwen.com/subject/viulbrtx.html