springbooot整合dynamic datasource数据库密码加密方式

 更新时间:2024年01月24日 08:39:36   作者:今天写bug了吗?  
这篇文章主要介绍了springbooot整合dynamic datasource 数据库密码加密方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

该文档主要用于在springboot中利用baomidou整合多数据源时候,如果需要对数据库密码进行加密该进行哪些操作。

1.引入依赖

 		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.2.1</version>
        </dependency>

2.生成密钥私钥

    public static void main(String[] args) throws Exception {
        //CryptoUtils 为自带工具 keySize 密钥越长,安全性越高
        String[] strings = CryptoUtils.genKeyPair(512);
        System.out.println("公钥:"+strings[0]);
        System.out.println("私钥:"+strings[1]);
    }

输出结果:

公钥用于加密,私钥用于解密,基于Rsa算法进行的加密

公钥:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAvFj7PQS+gOWPfpeDjS37qLikoJivZOdx4KbjuLFHENS7F10ztjKFx+MUt3iOmQO8nCYdwOZJeS2ky5Oof6HI1wIDAQABAkEAmvqE0HKk5p798eZuQq8BkpVMMTExsU+YLohkfMayeS+E7/Yp2fG2XyrQfMh8hQJ9C9bWW3iKr+icOssW3HkoYQIhAP5tAUAJZuYBkDIxpCJnDhCjhRoimENsz/PqjEizdVaPAiEAvYNQBxTKaEZ0r9fUPtyBItc36L9cPuFUrhS6w8k/zTkCIBRKx12/IjjYCRMnyGqCA6oqEJScC77c790JaPTnc0VbAiEAvFvxhLhDXVT50XShPkGIEIr8xNa95rmrosJzxvkV8vECH3TIKWgr09RmQztQh49xOu5ca0y7nXDIrEeg2AiktEE=
私钥:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALxY+z0EvoDlj36Xg40t+6i4pKCYr2TnceCm47ixRxDUuxddM7YyhcfjFLd4jpkDvJwmHcDmSXktpMuTqH+hyNcCAwEAAQ==

        // 公钥加密
        String encrypt = CryptoUtils.encrypt(s1, "password");
        System.out.println("密码加密为:"+ encrypt);
        // 私钥进行解密
        System.out.println("密码解密为:"+CryptoUtils.decrypt(s2,encrypt));

3.进行yml配置

spring: 
  datasource:
    druid:
      stat-view-servlet:
        enabled: true
        loginUsername: admin
        loginPassword: 123456
    dynamic:
      druid:
        initial-size: 5
        min-idle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 'X'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        filters: stat,wall,slf4j
        connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
      datasource:
          master:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: jdbc:mysql://xxxx.xx.xxxxx:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
            username: root
           # ENC()括号内就为加密的密码;
            password: ENC(b5YQRCK++Ek9nNawxXfwvVxbufXJORqMHM5Pv9W0VMSuN+UCZec7bakQV4ZOo025WM7Cf/iV4E5RgVaPF5SSVQ==)
            #注意:public-key为刚才生成私钥:但直接放入配置文件不安全,建议放入到启动项中
            public-key: ${publicKey}
          # 从库数据源
          slave:
            driver-class-name: org.postgresql.Driver
            url: jdbc:postgresql://xxxxxxxx:5432/test2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
            username: root
            password: ENC(b5YQRCK++Ek9nNawxXfwvVxbufXJORqMHM5Pv9W0VMSuN+UCZec7bakQV4ZOo025WM7Cf/iV4E5RgVaPF5SSVQ==)
            public-key: ${publicKey}

注意:

  • 可以直接使用CryptoUtils.encrypt("password),则下列的public-key参数可以不配置,视为使用默认rsa密钥对(不推荐)
  • public-key与password为同一级,切记层级不能配错

4.项目启动项配置

java -jar xxxxx.jar --publicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALxY+z0EvoDlj36Xg40t+6i4pKCYr2T.....

5.idea项目配置

6.注意事项

如果启动报错,可以尝试去掉

druid@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})

因为部分项目可能引入了druid,又引用了苞米豆,会引发冲突

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot自动注入的原理分析

    Spring Boot自动注入的原理分析

    这篇文章主要给大家分析介绍了关于Spring Boot自动注入的原理,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring Boot自具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 深入讲解我们说的CAS自旋锁到底是什么

    深入讲解我们说的CAS自旋锁到底是什么

    这篇文章主要给大家介绍了关于我们说的CAS自旋锁到底是什么的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • IDEA 2020.2 部署JSF项目的详细过程

    IDEA 2020.2 部署JSF项目的详细过程

    本文通过图文并茂的形式教大家如何在IDEA中创建一个JSF项目及遇到问题的解决方法,感兴趣的朋友跟随小编一起看看吧
    2021-09-09
  • Java求质数的几种常用算法分析

    Java求质数的几种常用算法分析

    这篇文章主要介绍了Java求质数的几种常用算法,结合实例形式分析了三种比较常见的求质数算法原理及相关实现技巧,需要的朋友可以参考下
    2018-12-12
  • Spring security oauth2以redis作为tokenstore及jackson序列化失败问题

    Spring security oauth2以redis作为tokenstore及jackson序列化失败问题

    这篇文章主要介绍了Spring security oauth2以redis作为tokenstore及jackson序列化失败问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教<BR>
    2024-04-04
  • 详解Spring Cloud Config采用Git存储时两种常用的配置策略

    详解Spring Cloud Config采用Git存储时两种常用的配置策略

    这篇文章主要介绍了详解Spring Cloud Config采用Git存储时两种常用的配置策略,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • java实现/创建线程的几种方式小结

    java实现/创建线程的几种方式小结

    在JAVA中,用Thread类代表线程,所有线程对象都必须是Thread类或者Thread类子类的实例,下面这篇文章主要介绍了java实现/创建线程的几种方式,需要的朋友可以参考下
    2021-08-08
  • IDEA插件Statistic统计代码快速分辨烂项目

    IDEA插件Statistic统计代码快速分辨烂项目

    这篇文章主要为大家介绍了使用IDEA插件Statistic来统计项目代码,帮助大家快速识别出烂项目,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-01-01
  • springcloud + mybatis + seate集成示例

    springcloud + mybatis + seate集成示例

    本文主要介绍了springcloud + mybatis + seate集成示例,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • SpringBoot+WebSocket实现即时通讯的方法详解

    SpringBoot+WebSocket实现即时通讯的方法详解

    这篇文章主要为大家详细介绍了如何利用SpringBoot+WebSocket实现即时通讯功能,文中示例代码讲解详细,对我们学习或工作有一定参考价值,需要的可以参考一下
    2022-05-05

最新评论