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日

相关文章

  • css优先级计算方法(推荐)

    CSS优先级计算方法(推荐) 1. 了解优先级 在计算CSS优先级之前,首先需要了解优先级的概念。优先级是用来确定当多个CSS规则应用到同一个元素时,哪个规则具有更高的优先级,从而决定最终的样式表现。 CSS优先级是由选择器的特殊性以及重要性来决定的。特殊性通过选择器的特征来衡量,越具体的选择器特征优先级越高;重要性是通过!important声明来设定,拥有…

    other 2023年6月28日
    00
  • css 如何让大小不同的图片表现一致,同时自适应呢?

    CSS如何让大小不同的图片表现一致,同时自适应呢? 在网页设计中,我们经常需要使用不同大小的图片来呈现不同的内容。但是,这些不同大小的图片可能会导致页面布局混乱,影响用户体验。在本攻略中,我们将详细讲解如何使用CSS让大小不同的图片表现一致,同时自适应。 实现步骤 要实现让大小不同的图片表现一致,同时自适应,我们需要完成以下步骤: 使用CSS设置图片的最大宽…

    other 2023年5月6日
    00
  • sqlserver中含有某字符串

    当然,我很乐意为您提供有关“SQL Server中含有某字符串”的完整攻略。以下是详细的步骤和两个示例: 1 SQL Server中含有某字符串的方法 在SQL Server中,您可以使用LIKE运算符和通配符来查找含某个字符串的值。LIKE运算符用于比较一个字符串与另一个字符串是否相似。通配符用于匹配一个字符串中的任字符。 以下是使用LIKE运算符和通配符…

    other 2023年5月6日
    00
  • ldr、str指令

    ldr、str指令 在ARM体系结构中,ldr和str指令是非常常用的指令。ldr指令用于从内存中加载数据到寄存器中,而str指令用于将寄存器中的数据存储到内存中。 ldr指令 ldr指令有多种指令格式,但最常用的格式是: ldr <Rd>, <Address> 其中, <Rd>表示目标寄存器(要加载到的寄存器), &lt…

    其他 2023年3月28日
    00
  • rgba颜色和16进制颜色互相转换

    rgba颜色和16进制颜色互相转换的完整攻略 在Web开发中,我们经常需要使用颜色来设置元素的背景色、字体颜色等。常见的颜色表示方式有两种:rgba颜色和16进制颜色。本文将介绍如何将这两种颜色表示方式互相转换。 rgba颜色转16进制颜色 将rgba颜色转换为16进制颜色的方法如下: 将rgba颜色的每个分量(红、绿、蓝、透明度)转换为16进制数; 将这些…

    other 2023年5月7日
    00
  • Win10 64位系统下鼠标右键刷新没反应的解决方案

    Win10 64位系统下鼠标右键刷新没反应的解决方案攻略 问题描述 在Win10 64位系统下,有时候当我们在文件资源管理器中右键点击某个文件夹或者桌面,点击“刷新”时,会出现刷新无反应的问题。 解决方案 以下是几种可能的解决方案,您可以按照顺序依次尝试。 1. 关闭第三方上下文菜单扩展程序 第三方上下文菜单扩展程序可能会与系统自带的上下文菜单扩展程序发生冲…

    other 2023年6月27日
    00
  • Java基于栈方式解决汉诺塔问题实例【递归与非递归算法】

    Java基于栈方式解决汉诺塔问题实例【递归与非递归算法】 算法介绍 汉诺塔问题是经典的递归算法示例。简单来说,汉诺塔问题是将一堆盘子从源柱子移动到目标柱子,可以借助第三个柱子,且每次只能移动一个较小的盘子到目标柱子上。其中,要求大的盘子必须在小的盘子之下。 为了解决汉诺塔问题,我们需要使用递归算法或非递归算法。其中,递归算法简单易懂,但是算法时间效率低,可能…

    other 2023年6月27日
    00
  • 完美解决idea无法搜索下载插件的问题

    下面我将为你详细讲解“完美解决Idea无法搜索下载插件的问题”的完整攻略。 1. 确认网络连接正常 首先,需要确认网络连接正常。如果你所在的网络有限制,可能会导致Idea无法连接到官方仓库或者插件库。可以尝试使用其他网络连接,比如热点或者VPN连接,来解决网络连接问题。 2. 确认Idea配置正确 其次,需要确认Idea的配置正确。可以参考以下步骤进行操作:…

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