使用场景
我们的一些项目的配置文件中难免会有一些敏感的配置信息,虽然现在都用alibaba的nacos,但是如果我们有些项目不是分布式的话,我们就需要处理一下。接下来我们就来看看,如何使用jasypt对敏感信息加密。
搭建SpringBoot项目
我们直接从start.spring.io直接构建就好了,我们就不在进行阐述了,我们打开项目,然后加入以下依赖,如下:
<dependencies>
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
<version>3.0.3</version>
</plugin>
</plugins>
</build>
编写配置
# 加密、解密用的密码
jasypt.encryptor.password=didispace
# 个性化配置
person.name=lisi
person.password=administrator
配置类:
@Component
@Slf4j
@Data
public class SystemConfig {
@Value("${person.name}")
private String name;
@Value("${person.password}")
private String password;
public String toString(){
log.info("name:{},password:{}",name,password);
return name+","+password;
}
}
启动入口:
@SpringBootApplication
public class JasyptApplication implements ApplicationRunner {
@Autowired
private SystemConfig config;
public static void main(String[] args) {
SpringApplication.run(JasyptApplication.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(config.toString());
}
}
使用命令对其加密
对要加密的属性,使用DEC()
修饰,如下:
person.password=DEC(administrator)
然后我们使用以下命令,(注意这里的密码就是jasypt.encryptor.password
)如下:
mvn jasypt:encrypt -Djasypr.encryptor.password=didispace
此时的属性配置就变成了ENC(),某些属性配置被加密了,这样算是保护项目的手段之一。那我们公司内部人员开发的时候,需要查看明文是什么,执行以下命令,解密配置文件中的属性值只会在控制台里面输出,配置文件中依旧是秘文。
如下:
mvn jasypt:decrypt -Djasypt.encryptor.password=didispace
如何处理配置文件中的加密密码呢?
这里我们还疏忽了一点,就是我们的加密密码
还在配置文件中,我们可以这样做,步骤如下:
- 首先,将密码配置去掉,内容如下:
person.name=lisi
person.password=DEC(administrator)
- 使用命令将配置加密,命令如下:
mvn jasypt:encrypt -Djasypr.encryptor.password=didispace
配置加密后,内容如下:
person.name=lisi
person.password=ENC(6CtwtxVn8mNu9qwFdxUfsiruwN9JnNW7s8fGLEPCDXqmQco93/RWeuYf9La0UEnk)
- 因为配置文件中没有配置jasypt的密码,那么我们用maven命令是无法打包的,我们可以使用以下命令将项目打成jar包,命令如下:
mvn jasypt:encrypt -Djasypt.encryptor.password=didispace install
- 此时我们直接使用命令是无法运行jar包的,因为现在密码是加密的,我们的
sysconfig配置类
无法完成属性注入,如下:
- 我们通过命令行传入参数的方式启动jar包,命令如下:
java -jar jasypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=didispace
- 我们打开jar包看下配置文件的内容是不是加密的,如下
这样我们就做到了没有配置密码情况下对项目、jar包的保护!!!