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的动态Sql组合模式详情

    Mybatis的动态Sql组合模式详情

    这篇文章主要介绍了Mybatis的动态Sql组合模式详情,这篇文章从组合模式的角度分析了Mybatis动态sql的部分,SqlNode是组合模式的Component接口,更多相关内容需要的小伙伴可以参考一下
    2022-08-08
  • Java lambda表达式实现Flink WordCount过程解析

    Java lambda表达式实现Flink WordCount过程解析

    这篇文章主要介绍了Java lambda表达式实现Flink WordCount过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java压缩之LZW算法字典压缩与解压讲解

    Java压缩之LZW算法字典压缩与解压讲解

    今天小编就为大家分享一篇关于Java压缩之LZW算法字典压缩与解压讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • springmvc整合ssm配置的详细代码

    springmvc整合ssm配置的详细代码

    今天通过实例代码给大家介绍了springmvc整合ssm配置的详细方法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • Java中的形式参数和实际参数案例详解

    Java中的形式参数和实际参数案例详解

    这篇文章主要介绍了Java中的形式参数和实际参数,形参和实参间的关系,两者是在调用的时候进行结合的,通常实参会将取值传递给形参,形参去之后进行函数过程运算,然后可能将某些值经过参数或函数符号返回给调用者,需要的朋友可以参考下
    2023-10-10
  • Java生成Echarts表图的2种实现方案

    Java生成Echarts表图的2种实现方案

    这篇文章主要给大家介绍了关于Java生成Echarts表图的2种实现方案,ECharts是一款功能非常强大的JavaScript图表库,文中通过代码实例介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Java编程泛型限定代码分享

    Java编程泛型限定代码分享

    这篇文章主要介绍了Java编程泛型限定的相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java中JVM的类加载器详解

    Java中JVM的类加载器详解

    这篇文章主要介绍了Java中的类加载器详解,从概念上来讲, 自定义类加载器一般指的是程序中由开发人员自定义的类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器,需要的朋友可以参考下
    2023-07-07
  • Java agent的入门与demo演示详解

    Java agent的入门与demo演示详解

    Java Agent 是 Java 1.5 版本之后引⼊的特性,其主要作⽤是在class被加载之前对其拦截,这篇文章主要介绍了agent的简单使用,需要的可以参考下
    2023-05-05
  • SpringCloud全局过虑器GlobalFilter的用法小结

    SpringCloud全局过虑器GlobalFilter的用法小结

    这篇文章主要介绍了SpringCloud全局过虑器GlobalFilter的使用,全局过虑器使用非常广泛,比如验证是否登录,全局性的处理,黑名单或白名单的校验等,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07

最新评论