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

 

可参考:Spring @Value注解使用总结一Spring @Value注解使用总结二

    SpringBoot中@Value源码解析

    SpringBoot整合Jasupt

posted @ 2020-01-05 15:27  如幻行云  阅读(12296)  评论(0编辑  收藏  举报