Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密

这篇具有很好参考价值的文章主要介绍了Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密),对Spring Boot项目的属性读取时进行加解密,但是没有说明对System.setProperty(key, value)设置的属性进行读取加解密,这个在开发过程中应该怎么实现呢?

二、开发方案

前置步骤我们在这里不再描述了,可以参考使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密),我们这里参考一下解决方案。

1. 通过扩展EnvironmentPostProcessor接口进行参数解密

1.1 示例代码
import com.learn.SM4Utils; // 自己实现的SM4算法工具类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;

import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class MyEnv implements EnvironmentPostProcessor {

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        // 获取所有系统参数
        Properties properties = System.getProperties();
        // 遍历
        Set<Map.Entry<Object, Object>> entries = properties.entrySet();
        for (Map.Entry<Object, Object> entry : entries) {
            // 获取设置值
            Object value = entry.getValue();
            if (value != null) {
                String v = (String) value;
                if (v.startsWith(SM4Utils.SM4_PREFIX)) { // 判断是否进行了加密配置
                    // 进行解密,然后重新设置
                    System.setProperty((String) entry.getKey(), SM4Utils.decryptStr(v));
                }
            }
        }
    }
}
1.2 注册自定义EnvironmentPostProcessor处理器

resource目录下新建META-INF目录,新建spring.factories文件,添加如下内容:

org.springframework.boot.env.EnvironmentPostProcessor=\
  com.learn.env.MyEnv
1.3 测试

示例代码:

SpringBootApplication
public class JenkinsDemo01Application {

    public static void main(String[] args) {
        String s = SM4Utils.encryptStr("hello,CSDN!");
        System.out.println("设置的value:" + s);
        System.setProperty("testKey", s);
        SpringApplication.run(JenkinsDemo01Application.class, args);

        System.out.println("获取的value:" + System.getProperty("testKey"));
    }

}

测试结果:

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密,springboot,spring boot,java,数据库,SM4,属性加密
)

2. 通过实现ApplicationListener事件监听实现

2.1 示例代码
import com.learn.SM4Utils;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.context.ApplicationListener;

import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class MyEventListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {

    @Override
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
        // 获取所有系统参数
        Properties properties = System.getProperties();
        // 遍历
        Set<Map.Entry<Object, Object>> entries = properties.entrySet();
        for (Map.Entry<Object, Object> entry : entries) {
            // 获取设置值
            Object value = entry.getValue();
            if (value != null) {
                String v = (String) value;
                if (v.startsWith(SM4Utils.SM4_PREFIX)) { // 判断是否进行了加密配置
                    // 进行解密,然后重新设置
                    System.setProperty((String) entry.getKey(), SM4Utils.decryptStr(v));
                }
            }
        }
    }
}
1.2 注册自定义ApplicationListener事件监听

resource目录下新建META-INF目录,新建spring.factories文件,添加如下内容:

org.springframework.context.ApplicationListener=\
  com.learn.event.MyEventListener
1.3 测试

示例代码:

SpringBootApplication
public class JenkinsDemo01Application {

    public static void main(String[] args) {
        String s = SM4Utils.encryptStr("hello,CSDN!");
        System.out.println("设置的value:" + s);
        System.setProperty("testKey", s);
        SpringApplication.run(JenkinsDemo01Application.class, args);

        System.out.println("获取的value:" + System.getProperty("testKey"));
    }

}

测试结果:

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密,springboot,spring boot,java,数据库,SM4,属性加密

通过以上两种方式,可以在项目启动过程中获取设置System参数,进行解密,这样获取的时候就是解密以后的参数了。文章来源地址https://www.toymoban.com/news/detail-835334.html

到了这里,关于Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【已解决】Spring boot项目获取到resource目录下文件完整路径怎么获取 ?

    在实际开发过程中,可能有时候,我们将文件放在resource下,在程序中需要获取到文件路径然后操作。比如,将公钥放到resource文件夹下,在程序中需要获取到这个公钥的完整路径。怎么操作?   需要访问的文件位置 获取方法如下: 在yaml文件中配置公钥文件名称: pem:   

    2024年02月09日
    浏览(48)
  • Spring boot 实现监听 Redis key 失效事件

    方式一:修改配置文件 redis.conf 方式二:命令行开启 notify-keyspace-events 选项的默认值为空 notify-keyspace-events 的参数可以是以下字符的 任意组合 , 它指定了服务器该发送哪些类型的通知。 字符 发送的通知 K 键空间通知,所有通知以 keyspace@ 为前缀 E 键事件通知,所有通知以

    2024年02月20日
    浏览(39)
  • Spring Boot 项目上传文件时,文件过大报错解决一站式办法(含:最大值设置,全局异常捕获)

            Spring Boot 项目传文件时,如果不单独设置大小,默认最大1Mb,会报这个错: 这个意思就是上传的文件超出了其最大允许大小1048576字节 解决办法就是,根据自己业务需求设置合适的文件上传大小限制 目录 配置文件配置示例 全局异常捕获 设置方法示例:  1. 首先在配

    2024年02月10日
    浏览(57)
  • 用API Key保护Spring Boot 接口的安全

         安全性在REST API开发中扮演着重要的角色。一个不安全的REST API可以直接访问到后台系统中的敏感数据。因此,企业组织需要关注API安全性。         Spring Security  提供了各种机制来保护我们的  REST API 。其中之一是  API  密钥。API 密钥是客户端在调用 API 调用时提

    2024年02月12日
    浏览(50)
  • Spring Boot @Value读不到Nacos配置中心的值。(properties配置文件)

    读不到配置中心的值, 配置中心的配置文件名字(Data ID的值)要以.properties结尾。 如果是yaml,就以yaml命名。

    2024年02月07日
    浏览(57)
  • Spring Boot微服务从yml文件中加载配置(使用@Value和@ConfigurationProperties)

    记录 :398 场景 :在Spring Boot的微服务中从application.yml等yml文件中加载自定义配置内容。使用@Value直接加载单个配置。使用@ConfigurationProperties注解把一个或者多个配置加载为Java对象。 版本 :JDK 1.8,SpringBoot 2.6.3 1.使用@Value注解加载配置 使用注解@RestController、@Service、@Component等

    2024年02月12日
    浏览(42)
  • Spring Boot学习随笔- @SpringBootApplication详解、加载绝对路径配置文件、工厂创建对象(@ConfigurationProperties、@Value)

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 这是一个 组合注解 ,就是由多个注解组成。下列注解红框内称为 元注解 (jdk提供) @Target :指定注解作用范围 @Retention :指定注解什么时候生效 重要注解 @SpringBootConfiguration:自动配置Spring、SpringMVC相关环境 @EnableAutoCo

    2024年02月05日
    浏览(57)
  • Spring Boot 升级 3.2 报错 Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! youlai-boot 升级 Spring Boot 3.2 版本项目启动报错: 报错截图如下: mybatis-spring 官方 ISSUE: https://githu

    2024年02月03日
    浏览(52)
  • spring boot application yaml key下划线如何转java的Properties对象字段驼峰

    spring boot yaml key和value如何映射到Properties对象 下面以MybatisPlusProperties为例 ##java properties 字段驼峰 ##yaml文件如图,key使用下划线 ##java对象驼峰转下划线匹配yaml文件key DataObjectPropertyName.toDashedForm(name);//驼峰转下划线 ##设置Properties对象字段值

    2024年02月01日
    浏览(48)
  • 详解二叉搜索树 --- key模型和key/value模型

    🍀 作者 : 阿润菜菜 📖 专栏 : 数据结构 key的模型是指每个节点只有一个键值,用于确定节点在树中的位置。节点的键值必须满足二叉搜索树的性质,即左子节点的键值小于父节点的键值,右子节点的键值大于父节点的键值。这种模型比较简单,但是不能存储额外的信息。

    2024年02月01日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包