Jasypt如何加密配置中的敏感信息

使用场景

我们的一些项目的配置文件中难免会有一些敏感的配置信息,虽然现在都用alibaba的nacos,但是如果我们有些项目不是分布式的话,我们就需要处理一下。接下来我们就来看看,如何使用jasypt对敏感信息加密。

搭建SpringBoot项目

我们直接从start.spring.io直接构建就好了,我们就不在进行阐述了,我们打开项目,然后加入以下依赖,如下:

	<dependencies>
		<dependency>
			<groupId>com.github.ulisesbocchiogroupId>
			<artifactId>jasypt-spring-boot-starterartifactId>
			<version>3.0.3version>
		dependency>
	dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>com.github.ulisesbocchiogroupId>
				<artifactId>jasypt-maven-pluginartifactId>
				<version>3.0.3version>
			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

Jasypt如何加密配置中的敏感信息_第1张图片
此时的属性配置就变成了ENC(),某些属性配置被加密了,这样算是保护项目的手段之一。那我们公司内部人员开发的时候,需要查看明文是什么,执行以下命令,解密配置文件中的属性值只会在控制台里面输出,配置文件中依旧是秘文。如下:

mvn jasypt:decrypt -Djasypt.encryptor.password=didispace

Jasypt如何加密配置中的敏感信息_第2张图片

如何处理配置文件中的加密密码呢?

这里我们还疏忽了一点,就是我们的加密密码还在配置文件中,我们可以这样做,步骤如下:

  1. 首先,将密码配置去掉,内容如下:
person.name=lisi
person.password=DEC(administrator)
  1. 使用命令将配置加密,命令如下:
mvn jasypt:encrypt -Djasypr.encryptor.password=didispace

配置加密后,内容如下:

person.name=lisi
person.password=ENC(6CtwtxVn8mNu9qwFdxUfsiruwN9JnNW7s8fGLEPCDXqmQco93/RWeuYf9La0UEnk)
  1. 因为配置文件中没有配置jasypt的密码,那么我们用maven命令是无法打包的,我们可以使用以下命令将项目打成jar包,命令如下:
mvn jasypt:encrypt -Djasypt.encryptor.password=didispace  install
  1. 此时我们直接使用命令是无法运行jar包的,因为现在密码是加密的,我们的sysconfig配置类无法完成属性注入,如下:
    Jasypt如何加密配置中的敏感信息_第3张图片
  2. 我们通过命令行传入参数的方式启动jar包,命令如下:
 java -jar jasypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=didispace
  1. 我们打开jar包看下配置文件的内容是不是加密的,如下
    Jasypt如何加密配置中的敏感信息_第4张图片
    这样我们就做到了没有配置密码情况下对项目、jar包的保护!!!

你可能感兴趣的:(Spring,spring,boot,java,spring)