Spring boot配置文件加解密详解

Spring Boot 配置文件加解密详解

在实际开发过程中,我们通常需要在配置文件中包含敏感信息(如:数据库用户名,密码等),但是为了避免这些敏感信息泄露,我们需要对这些信息进行加密保护。相信很多小伙伴都遇到过这样的问题,那么本文将为大家详细讲解如何在 Spring Boot 中使用 jasypt 对配置文件进行加解密,让大家轻松解决这一问题。

1. 添加依赖

首先,我们需要在 pom.xml 文件中添加 jasypt 依赖,代码如下:

<!-- jasypt 加解密依赖 -->
<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.3</version>
</dependency>

2. 配置加密算法密码

在使用 jasypt 进行加解密时,我们需要在配置文件中配置一个加密算法密码。我们可以通过以下两种方式配置密码:

2.1 在命令行中指定密码

在启动应用时,我们可以通过命令行的方式指定密码,代码如下:

java -jar app.jar --jasypt.encryptor.password=加密密码

2.2 在配置文件中指定密码

在 application.properties 或 application.yml 中,我们可以配置一个 jasypt.encryptor.password 属性,用于指定加密算法密码,代码如下:

# application.properties 文件
jasypt.encryptor.password=加密密码
# application.yml 文件
jasypt:
  encryptor:
    password: 加密密码

3. 配置加密敏感信息

在实际使用过程中,我们通常需要加密的敏感信息有很多,比如数据库用户名、密码、第三方接口密钥等。下面是一个示例,展示了如何在配置文件中加密数据库密码:

spring.datasource.username=user
spring.datasource.password=ENC(加密后的密码)

这里我们使用 ENC() 函数对密码进行加密,加密后的密码放在括号中。在实际应用中,我们可以通过 jasypt.encryptor.encrypt(未加密的密码) 命令生成加密后的密码。

4. 解密敏感信息

在应用启动时,jasypt 会自动对配置文件中的加密敏感信息进行解密操作,解密后的信息将会被自动应用到应用程序中。

示例一

为了更好地理解 jasypt 的使用,下面是一个示例。在使用该示例前,请确认你已经按照上述步骤添加了 jasypt 依赖和配置加密算法密码。

1. 添加依赖

在 pom.xml 文件中添加如下依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

2. 添加加密敏感信息配置

在 application.properties(或 application.yml)文件中,添加如下配置:

# application.properties
spring.datasource.username=admin
spring.datasource.password=ENC(8C4cq5abE4vP2G0UokN5Zg==)

这里的密码是通过 jasypt.encryptor.encrypt("admin") 命令生成的加密密码。

3. 创建测试类

接下来,我们创建一个测试类,使用 @Value 注解获取配置中的密码值,并使用该密码连接 MySQL 数据库。代码如下:

@RestController
public class TestController {

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

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

    @GetMapping("/test")
    public String test() {
        Sttring url = "jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=UTF-8";
        Connection connection = null;
        Statement statement = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(url, username, password);
            statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery("SELECT * FROM user");
            StringBuilder stringBuilder = new StringBuilder();
            while (resultSet.next()) {
                int userId = resultSet.getInt("id");
                String userName = resultSet.getString("name");
                String userPassword = resultSet.getString("password");
                stringBuilder.append(String.format("id=%d,name=%s,password=%s<br/>\n", userId, userName, userPassword));
            }
            return stringBuilder.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        } finally {
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

4. 启动应用

现在,我们可以启动应用,访问 http://localhost:8080/test,应用将会连接 MySQL 数据库,并查询 user 表中的数据,将查询结果格式化后返回给客户端。

示例二

下面是另一个示例。在使用该示例前,请确认你已经按照上述步骤添加了 jasypt 依赖和配置加密算法密码。

1. 添加依赖

在 pom.xml 文件中添加如下依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

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

2. 添加加密敏感信息配置

在 application.properties(或 application.yml)文件中,添加如下配置:

# application.properties
app.secret.password=ENC(8C4cq5abE4vP2G0UokN5Zg==)

这里的密码是通过 jasypt.encryptor.encrypt("my_secret_password") 命令生成的加密密码。

3. 创建测试类

接下来,我们创建一个测试类,使用 @Value 注解获取配置中的加密密码,并使用该加密密码解密明文密码值。代码如下:

@RestController
public class TestController {

    @Value("${app.secret.password}")
    private String encryptedPassword;

    @Autowired
    private StandardPBEStringEncryptor encryptor;

    @GetMapping("/password")
    public String password() {
        String decryptedPassword = encryptor.decrypt(encryptedPassword);
        return decryptedPassword;
    }
}

4. 配置 jasypt 加密器

在应用启动时,jasypt 会自动对配置文件中的加密信息进行解密操作,并将解密后的明文值应用到应用程序中。但是在解密之前,我们需要先配置 jasypt 加密器。在创建应用的任意位置,我们可以使用如下代码:

@Bean("encryptorBean")
public StandardPBEStringEncryptor encryptor() {
    StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
    encryptor.setPassword("加密算法密码");
    encryptor.setAlgorithm("加密算法");
    encryptor.setKeyObtentionIterations("迭代次数");
    encryptor.setPoolSize("线程池大小");
    encryptor.setProviderName("提供者名称");
    encryptor.setSaltGenerator(new SecureRandom());
    encryptor.setStringOutputType("加密字符串类型");
    return encryptor;
}

在上述代码中,我们可以为加密器指定加密算法密码、加密算法、迭代次数、线程池大小、提供者名称、盐生成器、加密字符串类型等参数。

在测试用例中,我们使用了 @Autowired 注解将加密器依赖注入到测试类中。

5. 启动应用

现在,我们可以启动应用,访问 http://localhost:8080/password,应用将会解密并返回加密密码对应的明文密码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring boot配置文件加解密详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • macbook外接显示器设置方法(新手入门贴)

    Macbook外接显示器设置方法(新手入门贴) 现在的Macbook已经越来越薄,而且一般没有提供常规HDMI接口,这也让很多人在外接显示器时感到困惑。实际上,连接Macbook外接显示器相对而言还是比较简单的,本篇将向大家详细介绍Macbook外接显示器的设置方法。 步骤一:准备工作 在进行Macbook外接显示器的设置之前,需要先准备好一些必要的硬件设备…

    其他 2023年3月28日
    00
  • 电脑应用程序图标和用户名怎么改?

    要改变电脑应用程序图标和用户名,需要在操作系统中进行设置。下面是完整攻略: 改变应用程序图标 找到想要改变图标的应用程序,右键点击图标,选择“属性”(或“信息”)选项; 在弹出的属性窗口中,点击“快捷方式”选项卡; 点击“更改图标”按钮; 在弹出的“更改图标”窗口中,选择想要使用的图标或浏览到其他图标文件,并点击“确定”; 如果要还原原来的图标,可以重复步骤…

    other 2023年6月25日
    00
  • Android UI实时预览和编写的各种技巧

    Android UI实时预览和编写的各种技巧攻略 在Android开发中,实时预览和编写UI是提高开发效率的重要环节。本攻略将介绍一些技巧,帮助您更好地进行Android UI的实时预览和编写。 1. 使用Android Studio的布局编辑器 Android Studio提供了强大的布局编辑器,可以实时预览UI的效果。以下是一些使用布局编辑器的技巧: 使…

    other 2023年8月25日
    00
  • SpringCache缓存自定义配置的实现

    下面是关于SpringCache缓存自定义配置的实现的详细攻略: 1. 为什么要自定义SpringCache配置? SpringCache是Spring框架提供的一种缓存组件,对于一些需要重复读取的数据,使用缓存可以减少操作数据库的次数,提升系统性能。但是,使用SpringCache默认配置会有一些限制,比如缓存的过期时间无法动态配置,缓存数据的存储格式默认…

    other 2023年6月25日
    00
  • PHP预定义变量9大超全局数组用法详解

    PHP预定义变量9大超全局数组用法详解 PHP提供了9个超全局数组,它们在任何作用域中都可访问,无需使用global关键字。下面将详细介绍这9个超全局数组的用法。 1. $GLOBALS $GLOBALS是一个包含了全局变量的全局关联数组。它可以在函数内部访问全局变量,也可以在函数外部访问局部变量。示例代码如下: $global_var = 10; func…

    other 2023年8月9日
    00
  • Android 自定义View的构造函数详细介绍

    以下是关于“Android 自定义View的构造函数详细介绍”的完整攻略。 什么是构造函数 在Java中,每一个类都有一个构造函数。构造函数是用来创建并初始化对象的特殊方法,它在创建对象时被调用。在Android中,自定义View也是一个继承自View或ViewGroup的类,因此也具有构造函数。 构造函数的作用 构造函数的主要作用是为对象的属性赋值,确保对…

    other 2023年6月26日
    00
  • php上传功能集后缀名判断和随机命名(强力推荐)

    PHP上传功能集后缀名判断和随机命名攻略 在PHP中,实现上传功能时,通常需要对上传的文件进行后缀名判断和随机命名,以增加安全性和避免文件名冲突。下面是一个完整的攻略,包含了后缀名判断和随机命名的实现。 后缀名判断 获取上传文件的原始文件名和临时文件路径。 使用pathinfo()函数获取文件的后缀名。 使用in_array()函数判断后缀名是否在允许的文件…

    other 2023年8月5日
    00
  • 详解Java编程中if…else语句的嵌套写法

    详解Java编程中if…else语句的嵌套写法 在Java编程中,if…else语句是一种常用的条件控制结构,用于根据条件的真假执行不同的代码块。有时候,我们需要在if或else语句中再嵌套if…else语句,以实现更复杂的条件判断和逻辑控制。本攻略将详细讲解Java编程中if…else语句的嵌套写法,并提供两个示例说明。 基本语法 if..…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部