SpringBoot 配置文件/属性ENC加密
一、配置文件
1. 配置文件分类
A. 按作用分类
application:由ApplicationContext加载的,用于spring boot项目的自动化配置;
bootstrap:由父ApplicationContext加载的,比applicaton优先加载,且boostrap里面的属性不能被覆盖;
B. 按格式分类:
.properties:数据无序,数据类型单一;
.yml: 文件更加结构化,数据有序,数据类型多样化,支持数组[],对象{},集合-,map等;
2. 配置文件默认位置及执行顺序
A. 项目根目录下的config目录下:最先加载;
B. 项目根目录下:第二加载;
C. resources目录下的config目录下:第三加载;
D. resources目录下(application.properties默认位置):最后加载;
当然可以通过spring.config.location自定义配置文件位置,通过spring.config.lname自定义文件名。
2. 配置属性读取方式
A. @ConfigurationProperties注解(适用于配置属性较多的情况)
首先要在main方法启动类上加@EnableConfigurationProperties,然后在自定义bean上加@ConfigurationProperties注解。
B. @Value注解(适用于配置属性较少的情况)
I. @Value(${property:defaultValue}):配置文件里对应的属性,defaultValue为属性为空时默认值,若属性没有且默认值没有,类启动就会报错
II. @Value(#{obj.property?:defaultValue}):SPEL表达式对应的内容,obj代表对象
III. @Value的处理器StringValueResolver初始化时机是PropertySourcesPlaceholderConfigurer类postProcessBeanFactory方法中,而处理@Value属性解析的时机是在getBean中的处理依赖resolveDependency方法中
示例:由于redis可能部署单机或集群,所以shiro授权缓存redis,可能因配置不同而不同
C. Environment方式
注入Environment类,然后调用getProperty()方法获取属性值
D. 自定义配置文件(适用于业务方面的参数配置)
自定义bean上加上@Configuration和@ConfigurationProperties注解
3. 多环境配置(application-{profile}.properties)
A. 开发环境:profile ——> dev
B. 测试环境:profile ——> test
C. 生产环境:profile ——> prod
启动方式:spring.profies.active = dev
二、配置信息ENC加密
1. Maven依赖
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency>
2. 配置类
package com.ruhuanxingyun.minio.config; import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties; import org.springframework.context.annotation.Configuration; /** * @description: 配置文件属性加解密配置类 * @author: ruphie * @date: Create in 2020/12/11 21:46 * @company: ruhuanxingyun */ @Configuration @EnableEncryptableProperties public class JasyptConfig { }
3. 生成加密密文
package com.ruhuanxingyun.minio; import org.jasypt.encryption.StringEncryptor; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ApplicationTests { @Autowired private StringEncryptor stringEncryptor; @Test void contextLoads() { String accessKey = stringEncryptor.encrypt("ruphie"); String secretKey = stringEncryptor.encrypt("minio"); System.out.println("加密后账号:"+ accessKey); System.out.println("加密后密码:"+ secretKey); } }
4. 配置密文
A. 默认格式是ENC(密码);
B. 必须指定jasypt.encryptor.password参数;
C. 秘钥可以存放在配置文件或环境变量上;
minio: endpoint: http://localhost:9000 access-key: ENC(xbtRi4G2Ax2Gk+jh7BYs2g==) secret-key: ENC(7vH6RnOeeZRs+zSKyqaj4A==) jasypt: encryptor: password: 20201211