Spring Cloud Config配置文件使用对称加密的方法

关于Spring Cloud Config配置文件使用对称加密的方法的攻略如下:

1. 配置对称加密

首先我们需要在工程中添加对称加密的模块和配置文件。比如我们可以使用Jasypt来实现对称加密,只需要在pom.xml文件中引入对应的依赖即可:

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

然后需要在配置文件中指定加密的算法和密钥。比如我们可以在application.properties文件中添加:

# 指定加密算法
jasypt.encryptor.algorithm=PBEWithMD5AndDES
# 指定密钥
jasypt.encryptor.password=80804669

然后就可以在配置文件中使用加密的方式了。比如我们可以将数据库连接信息进行加密,如下所示:

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306/db_name
spring.datasource.username=ENC(PTlIqRjvAEo5zrHdteJKuw==)
spring.datasource.password=ENC(JJ/JK28bMWdljthy0VIx/XxK8t8gX+fF)

其中ENC()表示对后面的内容进行加密,可以保证敏感信息的安全性。

2. 解密配置文件

在工程中需要能够解密配置文件。这需要在程序中添加对应的解密组件。我们需要添加如下的代码:

import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Application {

    @Autowired
    private StringEncryptor encryptor;

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Bean
    public StringEncryptor stringEncryptor() {
        return new JasyptStringEncryptor("80804669");
    }

    private class JasyptStringEncryptor implements StringEncryptor {

        private final Encryptor encryptor;

        public JasyptStringEncryptor(String password) {
            PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
            encryptor.setAlgorithm("PBEWithMD5AndDES");
            encryptor.setPassword(password);
            this.encryptor = encryptor;
        }

        @Override
        public String encrypt(String message) {
            return encryptor.encrypt(message);
        }

        @Override
        public String decrypt(String encryptedMessage) {
            return encryptor.decrypt(encryptedMessage);
        }
    }
}

其中JasyptStringEncryptor是对Jasypt的封装,解决了手动指定加密密钥的问题。我们还需要在配置文件中添加解密的密钥:

# 指定解密的密钥
jasypt.encryptor.password=80804669

这样在读取配置文件时会自动进行解密操作,但需要将@Value注解改成@Value("${password:}"),如下所示:

@Value("${spring.datasource.password:}")
private String password;

示例1

如何加密和解密配置文件中的字符串?

  1. 配置对称加密需要添加的依赖和配置文件。

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

在application.properties文件中添加加密算法和密钥。

# 指定加密算法
jasypt.encryptor.algorithm=PBEWithMD5AndDES
# 指定密钥
jasypt.encryptor.password=80804669

  1. 将需要加密的密码进行加密,并替换配置文件中的密码。

java
String password = "mysecretpassword";
StringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setAlgorithm("PBEWithMD5AndDES");
encryptor.setPassword("80804669");
String encryptedPassword = encryptor.encrypt(password);

将生成的加密密码放到配置文件中,并在对应的配置项前加上ENC()

spring.datasource.password=ENC(JJ/JK28bMWdljthy0VIx/XxK8t8gX+fF)

  1. 在程序中读取密码,系统会自动进行解密操作。

java
@Value("${spring.datasource.password:}")
private String password;

示例2

如何将加密的配置文件放到远程的Git仓库中,并使用Spring Cloud Config来自动管理配置文件和解密操作?

  1. 在远程Git仓库中添加加密前的配置文件。

  2. 在Spring Cloud Config Server中添加对称加密的配置。

encrypt:
key: mysecretkey

  1. 在Spring Cloud Config Client中添加对称加密的配置以及基础配置。

spring:
cloud:
config:
uri: http://localhost:8888
username: user
password: password
failFast: true
retry:
enabled: false
application:
name: myapp

encrypt:
key: mysecretkey

  1. 在程序中读取需要解密的密码。

java
@Value("${spring.datasource.password:}")
private String password;

这样就可以将加密的配置文件放到远程Git仓库中,使用Spring Cloud Config Server来管理,使用Spring Cloud Config Client来自动读取和解密。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Cloud Config配置文件使用对称加密的方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java 浅析代码块的由来及用法

    Java 浅析代码块的由来及用法 背景介绍 在Java中,代码块是一段静态或动态语句代码,在执行时会形成一个作用域。根据代码块的位置和声明方式,可以分为实例初始化块、静态初始化块和局部代码块。 实例初始化块 实例初始化块是被定义在类内部,但没有被声明为静态的代码块,可以在创建对象时被调用,用于对对象进行初始化操作。 public class Person {…

    Java 2023年5月30日
    00
  • 如何自定义Java异常类?

    当Java中提供的标准异常类无法满足开发需要时,可以考虑自定义异常类。自定义异常类可以继承Java中的Exception或者RuntimeException类。自定义异常类需要定义构造方法和重写toString()方法。下面是自定义Java异常类的详细步骤: 一、继承Exception或RuntimeException类 首先需要明确自定义异常类继承哪个异常…

    Java 2023年4月27日
    00
  • Spring 中jdbcTemplate 实现执行多条sql语句示例

    Spring中jdbcTemplate实现执行多条sql语句示例 jdbcTemplate提供了批量操作的方法batchUpdate,可以一起执行多条sql语句。下面是一段示例代码: @Autowired private JdbcTemplate jdbcTemplate; … public void batchUpdate(List<String…

    Java 2023年6月16日
    00
  • (starters)springboot-starter整合阿里云datahub方式

    完整攻略:Spring Boot整合阿里云DataHub 一、前置条件在开始整合之前,需要先确保以下几个条件: 阿里云账号及DataHub服务我们需要一个已开通DataHub服务的阿里云账号,假设我们已有一个名为”test-datahub”的DataHub项目。 工具准备a) Maven及Java IDE(本文以Intellij IDEA为例)b) 阿里云S…

    Java 2023年5月20日
    00
  • Spring自动装配@Autowired教程

    下面是关于Spring自动装配@Autowired的详细攻略: 什么是Spring自动装配@Autowired 在Spring中,我们说的自动装配(autowiring)是指通过容器自动连接两个或多个不同的bean。当有多个bean可以注入在一个类中时,Spring会自动为我们选择正确的bean并注入。而@Autowired则是Spring提供的一种自动装配…

    Java 2023年5月19日
    00
  • JVM的内存分配及各种常量池的区别(静态常量池、运行时常量池、字符串常量池)

    JVM内存分配 先了解下JVM中的内存分配,此处以hotspot vm为例(官方jdk采用的vm) 程序计数器 栈 1. 虚拟机栈 2. 本地方法栈 Java堆 堆内存是各个线程共享的区域 方法区 它用于存储已经被虚拟机加载的类信息、常量、静态变量、即编译器编译后的代码等数据。静态变量、常量在方法区,所有方法,包括静态和非静态的,也在方法区 这里解释一下方法…

    Java 2023年4月17日
    00
  • FCKeditor JSP版漏洞

    FCKeditor JSP版漏洞(CVE-2009-2265)是一种常见的跨站脚本攻击(XSS)漏洞,攻击者可以在网站页面上注入恶意脚本,从而窃取用户的敏感信息或者控制用户的会话。以下是详细讲解这个漏洞的完整攻略: 漏洞背景 FCKeditor是一个开源的富文本编辑器,其中包含了JSP版,但JSP版在处理文件上传方面存在漏洞。攻击者可以通过构造一个包含特制的…

    Java 2023年6月15日
    00
  • 多模块maven的deploy集成gitlab ci自动发版配置

    下面是“多模块maven的deploy集成gitlab ci自动发版配置”的攻略: 1. 环境准备 首先,在进行操作前需要做好以下准备工作: 安装 Maven 确保所有子模块中的 pom.xml 文件都正确配置了 groupId、 artifactId、以及 version。 安装 gitlab-runner 并注册到 GitLab 项目中。 2. GitL…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部