当前位置: 首页 > news >正文

Springboot自定义配置解密处理器

org.springframework.boot.env.EnvironmentPostProcessor是一个“环境后处理器”,让你有机会在应用启动的早期阶段,动态地添加、修改或删除环境中的属性(Properties),比如来自配置文件 (application.yml)、系统属性、命令行参数等的值。

一、创建一个类实现 EnvironmentPostProcessor 接口

import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;import java.util.HashMap;
import java.util.Map;
import java.util.Set;/*** 系统环境后置处理器*/
@Slf4j
public class DecryptEnvPostProcessor implements EnvironmentPostProcessor {private static final Set<String> ENCRYPTED_KEYS = Set.of("spring.datasource.password");private static final AES aes = SecureUtil.aes("Encrypt-20251106".getBytes());@Overridepublic void postProcessEnvironment(ConfigurableEnvironment env, SpringApplication application) {Map<String, Object> decryptedValues = new HashMap<>();for (PropertySource<?> source : env.getPropertySources()) {if (!(source instanceof EnumerablePropertySource<?> eps)) {continue;}for (String keyName : eps.getPropertyNames()) {if (!ENCRYPTED_KEYS.contains(keyName)) {continue;}Object value = eps.getProperty(keyName);if (!(value instanceof String strValue)) {continue;}//判断是否为加密值(用ENC()包裹)if (!strValue.startsWith("ENC(") || !strValue.endsWith(")")) {continue;}String cipherText = strValue.substring(4, strValue.length() - 1);try {//解密String plainText = aes.decryptStr(cipherText);decryptedValues.put(keyName, plainText);} catch (Exception e) {log.error("解密配置项 [" + keyName + "] 失败,保持原密文: " + e.getMessage());}}}//将解密后的值添加到最高优先级的PropertySource中if (!decryptedValues.isEmpty()) {MapPropertySource decryptedPropertySource = new MapPropertySource("decryptedProperties", decryptedValues);env.getPropertySources().addFirst(decryptedPropertySource);}}
}

二、在 src/main/resources/META-INF/spring.factories 文件中进行声明

org.springframework.boot.env.EnvironmentPostProcessor=com.**.config.DecryptEnvPostProcessor

三、生成密码

    @Testpublic void test() {AES aes = SecureUtil.aes("Encrypt-20251106".getBytes());//加密String encryptHex = aes.encryptHex("123456");log.info("加密后 (Hex): " + encryptHex);//解密String decryptStr = aes.decryptStr(encryptHex);log.info("解密后: " + decryptStr);}

四、在配置文件中应用

http://www.dtcms.com/a/579526.html

相关文章:

  • 规则引擎是什么
  • 我要发布文章到网站上推广 哪些网站最好网站开发品牌有哪些
  • 罗湖商城网站建设哪家服务周到上海市中心
  • 在线安装软件网站开发东莞网站建设模具
  • 制作网站几个步骤新乡网站建设方案
  • 企业网站开发一薇长春网站推广排名
  • 手机网站 怎么开发微信小程序开发工具软件
  • 找网站漏洞赚钱怎么做的网站优化公司有哪些
  • 河间建设网站wordpress 文章章节开发
  • 好的网站具备条件wordpress文章设置目录
  • 在哪查找网站的建设者运营管理系统
  • 有阿里空间怎么做网站案例学习网站建设方案
  • 网站域名解析查询网站域名续费多少钱
  • 英文网站的外部链接 建设wordpress tag静态化
  • 网站做响应式还是移动端电商知识网
  • 教做衣服网站设计网站页面注意事项
  • 做flash网站搭建局域网
  • 网站百度收录怎么做哪些网站做夜场女孩多
  • 域名注册服务商网站广州注册公司地址怎么解决
  • 天河建设网站多少钱中国建筑招聘
  • 扬州网络科技有限公司网站建设张家界做网站找谁
  • 网站后台的建设焦作 做 网站
  • Java Number Math 类详解
  • 茶叶网站模板下载产品展示网站 模板
  • Redis-相关问题
  • 网站平台建设要多久广西宏泰成建设集团网站
  • 教育网站建设公司上海建设网站是国家级吗
  • 简述电子政务网站设计的技术兴仁县城乡建设局网站
  • 做淘宝网站需要湖南省建设厅
  • 怎样建设自己网站的后台百度学术论文查重入口