NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 设计模式

  • 开发规范

  • 经验分享

  • 记录

  • 快速开始

    • Spring Boot整合RabbitMQ
    • Spring Boot整合Email邮件发送
    • Spring Boot整合jasypt加密配置文件
      • 环境
      • pom.xml
        • 依赖
        • 插件
      • ~~application.yml~~
      • 文档加解密
        • 手动加解密
        • 批量加解密
      • 启动参数
      • 记录一个坑
      • 参考
    • Spring Boot整合单元测试
    • Spring Boot整合优雅关机
    • Spring Boot整合Redis分布式锁
    • Spring Boot整合MyBatis-plus
    • XXL-JOB快速上手
    • Spring Boot整合WebSocket(stomp协议)
    • SpringBoot整合i18n(多语言)
    • 第三方登录 - Google
    • 第三方登录 - Facebook
    • Spring Boot 整合Elasticsearch
  • 笔记

  • 面试题

  • 微服务

  • 踩过的坑

  • Java
  • 快速开始
NipGeihou
2022-01-16
目录

Spring Boot整合jasypt加密配置文件

值得一提的是,除了 jasypt 加密配置外,druid 也自带有加密功能

# 环境

  • Maven 版本:Apache Maven 3.8.1
  • jasypt 版本:3.0.4

# pom.xml

# 依赖

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

# 插件

用于单次的加解密

<build>
  <plugins>
    <plugin>
      <groupId>com.github.ulisesbocchio</groupId>
      <artifactId>jasypt-maven-plugin</artifactId>
      <version>3.0.4</version>
    </plugin>
  </plugins>
</build>

# application.yml

不建议直接写在 application.yml 中,不安全,应该启动时携带参数传递

#  加解密密钥
jasypt:
  encryptor:
    password: 密钥

# 文档加解密

密钥不应该出现在配置文件中,而是全程在外部操作

# 手动加解密

加密

如果是多模块项目,要在启动模块下执行 *(不确定这是不是一个 bug,之所以要在启动类下执行,是因为它要读取配置文件,但实际上,这个命令并不需要读取配置文件)*

# 我当前mvn版本的正确写法
mvn jasypt:encrypt-value -D jasypt.encryptor.password="密钥" -D jasypt.plugin.value="明文"

# 官方文档的写法
# mvn jasypt:encrypt-value -Djasypt.encryptor.password="密钥" -Djasypt.plugin.value="明文"

解密

# 我当前mvn版本的正确写法
mvn jasypt:decrypt-value -D jasypt.encryptor.password="密钥" -D jasypt.plugin.value="密文"

# 官方文档的写法
# mvn jasypt:decrypt-value -Djasypt.encryptor.password="密钥" -Djasypt.plugin.value="密文"

# 批量加解密

批量将配置文件中要加密的属性值进行加密,将要加密的内容使用 DEC() 包起来

username: nadmin_vue_base
password: DEC(123456)

加密

# 将application-dev.yml中的DEC(aaaa)->ENC(bbbb)
mvn jasypt:encrypt -D jasypt.encryptor.password="密钥" -D jasypt.plugin.path=file:src/main/resources/application-dev.yml

解密

# 将application-dev.yml中的ENC(bbbb)->DEC(aaaa)
mvn jasypt:decrypt -D jasypt.encryptor.password="密钥" -D jasypt.plugin.path=file:src/main/resources/application-dev.yml

由于本人的配置文档中存在中文注释,使用批量加解密会导致乱码,批量解密这一步并没有完成测试,请自测。

# 启动参数

添加 Program arguments

--jasypt.encryptor.password=密钥

完

# 记录一个坑

环境:

  • 项目类型:多模块单体项目
  • Maven 版本:Apache Maven 3.8.1
  • jasypt 版本:3.0.4

项目是多模块单体项目,由于并不打算将密钥 ( jasypt.encryptor.password ) 存储到配置文件中,想通过外部传递密钥,这样即便被获取到源码,也不能解出明文。在查阅了相当多的资料中,加解密的方式有很多种,有测试类、在线网站、jar 包、maven 插件,在官方仓库的 readme.md 中使用的是 maven 插件的方式,这一种方式不需要依赖在线网站或是单独的 jar,是我觉得比较理想的方案,于是乎我的坑就来了:

我先是在 /pom.xm 中添加了相应的插件,使用官方提供的命令

mvn jasypt:encrypt-value -Djasypt.encryptor.password="the password" -Djasypt.plugin.value="theValueYouWantToEncrypt"

执行后报错:

[ERROR] Failed to execute goal com.github.ulisesbocchio:jasypt-maven-plugin:3.0.4:encrypt-value (default-cli) on project xxx: Execution default-cli of goal com.github.ulisesbocchio:jasypt-maven-plugin:3.0.4:encrypt-value failed: Config data location 'file:./src/main/resources/' cannot be found -> [Help 1]

然后我把插件放到了启动类所在的 模块/pom.xml ,报错就变成了

[ERROR] Failed to execute goal com.github.ulisesbocchio:jasypt-maven-plugin:3.0.3:encrypt-value (default-cli) on project ruoyi: No jasypt.plugin.value property provided -> [Help 1]

开始我并没有仔细看这个报错,以为还是插件的问题,以为只能够在根 pom.xml 中使用,在这里卡了很久,最后我仔细查看报错,是没有提供 jasypt.plugin.value property 属性。

于是我使用 mvn -help 查阅了当前 maven 版本的参数说明,发现官方文档中的写法并不适用于我当前使用的 maven 版本,所以我当前环境下正确写法应该是

#  -D,--define <arg>                      Define a system property
mvn jasypt:encrypt-value -D jasypt.encryptor.password="密钥" -D jasypt.plugin.value="明文"

# 参考

  • [ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring boot](ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring boot )
  • Spring Boot demo 系列(九):Jasypt - SegmentFault 思否 (opens new window)
  • How to encrypt passwords in a Spring Boot project using Jasypt - GeeksforGeeks (opens new window)
  • feat: run encrypt-value mojo anywhere with maven command. by qxo · Pull Request #284 · ulisesbocchio/jasypt-spring-boot (opens new window)
上次更新: 2022/12/31, 03:04:26
Spring Boot整合Email邮件发送
Spring Boot整合单元测试

← Spring Boot整合Email邮件发送 Spring Boot整合单元测试→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式