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技术站