mybatis-plus的SafetyEncryptProcessor安全加密处理示例解析

 更新时间:2023年08月28日 09:36:04   作者:codecraft  
这篇文章主要为大家介绍了mybatis-plus的SafetyEncryptProcessor安全加密处理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

本文主要研究一下mybatis-plus的SafetyEncryptProcessor

SafetyEncryptProcessor

mybatis-plus-boot-starter/src/main/java/com/baomidou/mybatisplus/autoconfigure/SafetyEncryptProcessor.java

public class SafetyEncryptProcessor implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        /**
         * 命令行中获取密钥
         */
        String mpwKey = null;
        for (PropertySource<?> ps : environment.getPropertySources()) {
            if (ps instanceof SimpleCommandLinePropertySource) {
                SimpleCommandLinePropertySource source = (SimpleCommandLinePropertySource) ps;
                mpwKey = source.getProperty("mpw.key");
                break;
            }
        }
        /**
         * 处理加密内容
         */
        if (StringUtils.isNotBlank(mpwKey)) {
            HashMap<String, Object> map = new HashMap<>();
            for (PropertySource<?> ps : environment.getPropertySources()) {
                if (ps instanceof OriginTrackedMapPropertySource) {
                    OriginTrackedMapPropertySource source = (OriginTrackedMapPropertySource) ps;
                    for (String name : source.getPropertyNames()) {
                        Object value = source.getProperty(name);
                        if (value instanceof String) {
                            String str = (String) value;
                            if (str.startsWith("mpw:")) {
                                map.put(name, AES.decrypt(str.substring(4), mpwKey));
                            }
                        }
                    }
                }
            }
            // 将解密的数据放入环境变量,并处于第一优先级上
            if (CollectionUtils.isNotEmpty(map)) {
                environment.getPropertySources().addFirst(new MapPropertySource("custom-encrypt", map));
            }
        }
    }
}

SafetyEncryptProcessor实现了EnvironmentPostProcessor接口,在postProcessEnvironment方法中先是找到mpw.key,然后遍历所有PropertySource的所有属性,找到mpw:开头的,然后进行解密并替换到密文,最后放在environment的第一个PropertySource

spring.factories

mybatis-plus-boot-starter/src/main/resources/META-INF/spring.factories

# Auto Configure
org.springframework.boot.env.EnvironmentPostProcessor=\
  com.baomidou.mybatisplus.autoconfigure.SafetyEncryptProcessor

小结

之前的文章聊聊springboot的EnvironmentPostProcessor提到springboot提供了EnvironmentPostProcessor接口,该接口有postProcessEnvironment方法,其中envrionment参数类型为ConfigurableEnvironment,即应用可以通过实现这个接口进行env环境变量的操作。而mybatis-plus的SafetyEncryptProcessor正是一个实战的好例子。

以上就是mybatis-plus的SafetyEncryptProcessor安全加密处理示例解析的详细内容,更多关于mybatis-plus SafetyEncryptProcessor的资料请关注脚本之家其它相关文章!

相关文章

  • MyBatis批量插入/修改/删除MySql数据

    MyBatis批量插入/修改/删除MySql数据

    这篇文章主要给大家介绍了关于MyBatis批量插入/修改/删除MySql数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • @ConfigurationProperties及@NestedConfigurationProperty的使用解读

    @ConfigurationProperties及@NestedConfigurationProperty的使用解读

    本文分享了如何在Spring Boot应用中使用`@ConfigurationProperties`和`@NestedConfigurationProperty`进行属性绑定,提供了一个自定义配置的示例,并附带个人经验供参考
    2026-02-02
  • 详解SpringSecurity处理会话管理和注销功能

    详解SpringSecurity处理会话管理和注销功能

    本文介绍了详解SpringSecurity处理会话管理和注销功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-01-01
  • SpringBoot整合Quartz方法详解

    SpringBoot整合Quartz方法详解

    这篇文章详解介绍了SpringBoot整合Quartz的方法,Quartz是一个比较成熟了的定时任务框架,本文实例代码给大家详细讲解,需要的朋友可以参考下
    2023-04-04
  • Java中ThreadLocal的用法及原理详解

    Java中ThreadLocal的用法及原理详解

    这篇文章主要介绍了Java中ThreadLocal的用法及原理详解,在并发编程中,如果一个类变量被多个线程操作,会造成线程安全问题,使用ThreadLocal可以让每个线程拥有线程内部的变量,防止多个线程操作一个类变量造成的线程安全问题,需要的朋友可以参考下
    2023-09-09
  • Java中Map接口使用以及有关集合的面试知识点汇总

    Java中Map接口使用以及有关集合的面试知识点汇总

    在java面试过程中,Map时常会被作为一个面试点来问,下面这篇文章主要给大家介绍了关于Java中Map接口使用以及有关集合的面试知识点汇总的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 谈谈Spring AOP中@Aspect的高级用法示例

    谈谈Spring AOP中@Aspect的高级用法示例

    在Spring AOP中目前只有执行方法这一个连接点,下面这篇文章主要给大家介绍了关于Spring AOP中@Aspect的高级用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • 详细分析JAVA 线程池

    详细分析JAVA 线程池

    这篇文章主要介绍了JAVA 线程池的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java使用双异步实现将Excel的数据导入数据库

    Java使用双异步实现将Excel的数据导入数据库

    在开发中,我们经常会遇到这样的需求,将Excel的数据导入数据库中,这篇文章主要来和大家讲讲Java如何使用双异步实现将Excel的数据导入数据库,感兴趣的可以了解下
    2024-01-01
  • java 重定义数组的实现方法(与VB的ReDim相像)

    java 重定义数组的实现方法(与VB的ReDim相像)

    java 重定义数组的实现方法(与VB的ReDim相像),需要的朋友可以参考一下
    2013-04-04

最新评论