Springboot简单功能示例-6 使用加密数据源并配置日志

这篇具有很好参考价值的文章主要介绍了Springboot简单功能示例-6 使用加密数据源并配置日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

springboot-sample

介绍

springboot简单示例 跳转到发行版 查看发行版说明

软件架构(当前发行版使用)

  1. springboot
  2. hutool-all 非常好的常用java工具库 官网 maven
  3. bcprov-jdk18on 一些加密算法的实现 官网 maven
  4. h2 纯java的数据库,支持内存、文件、网络数据库 官网 maven

安装教程

git clone --branch 6.使用加密数据源并配置日志 git@gitee.com:simen_net/springboot-sample.git
 

功能说明

  1. 配置logback
  2. 配置了数据源,对数据库账号密码进行加密
  3. 增加了系统启动配置

发行版说明

  1. 完成基本WEB服务 跳转到发行版
  2. 完成了KEY初始化功能和全局错误处理 跳转到发行版
  3. 完成了基本登录验证 跳转到发行版
  4. 完成了自定义加密进行登录验证 跳转到发行版
  5. 完成了使用JWT进行授权认证 跳转到发行版
  6. 完成了使用加密数据源并配置日志 跳转到发行版 查看发行版说明

使用加密数据源并配置日志

配置logback

配置logback.xml,规范日志输出格式,配置info和error日志输出为文件(保存30天)

配置数据源

  1. 在application-dev.yaml中配置数据源

    # spring基本配置
    spring:
      # 数据库连接池配置
      datasource:
        driver-class-name: org.h2.Driver
        # 使用H2数据库,此处不配置url,在com.strong.config.DataSourceConfig中配置本地目录数据库
        # url: jdbc:h2:mem:simen
        # url: jdbc:h2:./simen
        username: BKkV4rITSiMsMBEZtIoNeLivkfJYjRNPJjX0EJ21hxMQ/oflQL5Qk3u8B7RhqfD+KIkOkPHDSNx3c67q78lTwLqTOCuYkltDI2R9kES3d4yXb+bFxtXAm9qs7m+EMLX85MRX
        password: BDNZEUz2C0XDhU0y3OtKUCVkoLKVlTo5EXEIhBtKHwAGT5heBYyKkkd0I5J8A1PBRGkczhA86MqI2SQTXXuJ+b+ki4jqhlNhELG+ts6T/VZugd6pKs5bbqcSDWqT5s0XEpbgJ1Ah7aE56AbazjVaBX5U3FsEU/KhWHQ3qx0KoN47
        # 连接池类型
        type: com.alibaba.druid.pool.DruidDataSource
        # 参数配置
        druid:
          # 初始化时建立物理连接的个数
          initialSize: 5
          # 最小连接池数量
          minIdle: 20
          # 最大连接池数量
          maxActive: 50
          # 获取连接时最大等待时间,单位:毫秒
          maxWait: 60000
    
          # 是否缓存PSCache,PSCache对支持游标的数据库性能提升巨大
          poolPreparedStatements: true
          # 启用PSCache,必须配置大于0
          maxPoolPreparedStatementPerConnectionSize: 20
    
          # 用来检测连接是否有效的sql
          validationQuery: select 1
          # 检测连接是否有效的超时时间,单位:秒
          validationQueryTimeout: 5
          # 申请连接时执行validationQuery检测连接是否有效,会降低性能
          testOnBorrow: false
          # 归还连接时执行validationQuery检测连接是否有效,会降低性能
          testOnReturn: false
          # 申请连接的时候检测连接是否有效
          testWhileIdle: true
    
          # 空闲时间超过minEvictableIdleTimeMillis,是否强制keepAlive
          keepAlive: false
          # 空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接,单位是毫秒
          timeBetweenEvictionRunsMillis: 60000
          # 连接保持空闲而不被驱逐的最小时间,单位毫秒
          minEvictableIdleTimeMillis: 30000
    
          # 物理连接初始化的时候执行的sql。
          connectionInitSqls: select 0
    
          # 常用的插件有:监控统计用的filter:stat、日志用的filter:log4j、防御sql注入的filter:wall
          filters: stat,wall,slf4j
    
          # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
          connectionProperties: |-
            druid.stat.mergeSql=false;
            druid.stat.slowSqlMillis=5000
     
  2. 增加数据库配置DataSourceConfig,对账号密码进行加密,解决项目源码提交到公共git造成账号密码泄露的问题。

    /**
     * 从默认参数配置数据源
     *
     * @return {@link DataSource}
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    public DataSource getDataSource() {
        DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
        // 如果是H2数据库,则注入加载
        if (StrUtil.equals(org.h2.Driver.class.getName(), driverClassName)) {
            // 配置数据库URL
            String strJdbcUrl = "jdbc:h2:tcp://localhost:9092/" +
                    StrongUtils.getStaticPath(STR_DIRECTORY_STATICS, databaseName);
            druidDataSource.setUrl(strJdbcUrl);
            log.info("成功连接H2数据库[{}]", strJdbcUrl);
        }
        // 使用私钥解密账号密码,注入数据源
        druidDataSource.setUsername(SM2_OBJ.decryptStr(username, KeyType.PrivateKey));
        druidDataSource.setPassword(SM2_OBJ.decryptStr(password, KeyType.PrivateKey));
        return druidDataSource;
    }
     
    • 使用DruidDataSource从application-dev.yaml中加载数据源配置参数DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
    • 在使用H2数据库时,使用项目名为数据库名,数据库文件保存在当前项目所在目录中的static
    • 从application-dev.yaml中读取加密后的数据库账号密码,使用私钥解密后注入数据源

系统启动配置

  1. 在SpringbootSampleApplication.java中配置启动
    public static void main(String[] args) {
        // 测试加解密、签名字符串
        SecurityUtils.testPasswordEncode();
    
        // 生成数据密码加密后字符串
        String strDatabaseUsername = "sa";
        String strDatabasePassword = "123456";
        log.info("\n使用公钥加密数据库账号密码,需将加密字符串配置到application.yaml\n数据库用户名[{}] 加密后[{}]\n密码[{}] 加密后[{}]\n",
                strDatabaseUsername, SM2_OBJ.encryptBase64(strDatabaseUsername, KeyType.PublicKey),
                strDatabasePassword, SM2_OBJ.encryptBase64(strDatabasePassword, KeyType.PublicKey)
        );
    
        // 启动H2服务器
        H2Utils.startH2Server();
        // 设置当前时区
        TimeZone.setDefault(TimeZone.getTimeZone(STR_TIME_ZONE_ASIA_SHANGHAI));
        // 获取系统对象
        SpringApplication application = new SpringApplication(SpringbootSampleApplication.class);
        // 系统pid记录文件
        String strPidFile = StrongUtils.getStaticPath(STR_FILE_APP_PID);
        // 将pid监听信息写入记录文件,使用 cat /xxxx/app.id | xargs kill 停止服务
        application.addListeners(new ApplicationPidFileWriter(strPidFile));
        log.info("将pid监听信息写入记录文件{}", strPidFile);
        // 启动系统
        application.run();
    }

     文章来源地址https://www.toymoban.com/news/detail-712096.html

到了这里,关于Springboot简单功能示例-6 使用加密数据源并配置日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • springboot多数据源使用

    在工作上有一个新项目,现在需要获取旧项目的用户信息、积分的操作等等,所以需要调用另外一个项目的数据库,所以我们可以配置多数据源。 yml版本  properties版本 在impl类上加注解@DS(\\\"master\\\"),master为配置的master名字 调用方法  获取结果  在impl类上加注解@DS(\\\"slave_1\\\"),

    2024年02月11日
    浏览(30)
  • springboot使用DynamicDataSource来动态切换数据源

    DynamicDataSource是一个数据源路由器,可以根据上下文动态选择数据源。可以在每个请求或线程中将数据源设置为当前需要使用的数据. 创建一个 DynamicDataSource 类,它继承自 AbstractRoutingDataSource 。在该类中重写**determineCurrentLookupKey()**方法,该方法返回一个字符串,用于指示当前

    2024年02月05日
    浏览(32)
  • Spring | 基于SpringBoot的多数据源实战 - 使用seata实现多数据源的全局事务管理

    在软件开发中, 多数据源 的应用越来越普遍,特别是在 微服务架构 和 业务模块化 的场景下。多数据源能够让不同的业务模块和微服务拥有各自独立的数据存储,大大提高了系统的灵活性和可维护性。本文将深入探讨多数据源的配置和实施,以及在 Spring Boot 环境下,如何通

    2024年02月07日
    浏览(51)
  • [前车之鉴] SpringBoot原生使用Hikari数据连接池升级到动态多数据源的深坑解决方案 & RocketMQ吞掉异常问题排查

    当前业务场景我们使用原生SpringBoot整合Hikari数据源连接池提供服务,但是近期业务迭代需要使用动态多数据源,很自然想到dynamic-source,结果一系列惨案离奇发生。。。 原生SpringBoot整合HikariCp数据源连接池配置【这个是没问题的配置】 而升级后的动态多数据源配置如下:【

    2024年02月01日
    浏览(42)
  • 030:vue中使用md5进行数据加密示例

    第030个 查看专栏目录: VUE ------ element UI 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使用,computed,watch,生命周期(beforeCreate,created,beforeMount,mounted, beforeUpdate,upda

    2024年02月09日
    浏览(34)
  • 【工作小札】利用动态数据源实现Sass的一种思路(内含完整代码示例)

    ✨这里是第七人格的博客✨小七,欢迎您的到来~✨ 🍅系列专栏:【工作小札】🍅 ✈️本篇内容: 利用动态数据源实现Sass化✈️ 🍱本篇收录完整代码地址:https://gitee.com/diqirenge/sheep-web-demo/tree/master/sheep-web-demo-dynamicDataSource🍱 针对Sass多租户,业内有许多解决方案。一般来说

    2023年04月20日
    浏览(42)
  • RuoYi对数据库密码加密功能使用

    在我们日常配置文件中会输入数据库的ip,端口,数据库名称,数据库账号和数据库密码,如果是明文就会出现这个安全隐患的问题,在cnas测试中安全测试可能会直接将这漏洞归类为中级漏洞,所以为了解决这个问题我们可以通过集成RuoYi框架的druid加密功能 文件名称:drui

    2024年02月09日
    浏览(35)
  • SpringBoot——动态数据源(多数据源自动切换)

    日常的业务开发项目中只会配置一套数据源,如果需要获取其他系统的数据往往是通过调用接口, 或者是通过第三方工具比如kettle将数据同步到自己的数据库中进行访问。 但是也会有需要在项目中引用多数据源的场景。比如如下场景: 自研数据迁移系统,至少需要新、老两

    2024年02月16日
    浏览(31)
  • SpringBoot使用Jasypt对配置文件加密、数据库密码加密

    Dmo源码请点这里! Jasypt是一个Java简易加密库,用于加密配置文件中的敏感信息,如数据库密码。jasypt库与springboot集成,在实际开发中非常方便。 1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进

    2024年04月28日
    浏览(31)
  • SpringBoot从数据库读取数据数据源配置信息,动态切换数据源

            首先准备多个数据库,主库smiling-datasource,其它库test1、test2、test3         接下来,我们在主库smiling-datasource中,创建表databasesource,用于存储多数据源相关信息。表结构设计如下         创建好表之后,向表databasesource中存储test1、test2、test3三个数据库的相关配置

    2024年01月16日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包