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

springboot,简单,功能,示例,使用,加密,数据源,配置,日志 · 浏览次数 : 17

小编点评

**springboot-sample介绍springboot简单示例 跳转到发行版查看发行版说明软件架构** **简介** springboot-sample是一个使用Spring Boot框架构建的示例应用程序,它提供了一个简单的演示如何从开发版本创建发行版并查看发行版说明软件架构。 **功能说明** * 数据库连接池配置 * H2数据库连接 * 摘要日志配置 * 数据源加密 * JWT授权认证 * 使用加密数据源并配置日志 * 查看发行版说明使用加密数据源并配置日志 **步骤** 1. **构建应用程序** - 创建一个新的Spring Boot项目 - 在项目中添加H2数据库依赖 - 配置数据源连接并设置密码 - 创建一个简单的控制器以测试数据库连接 2. **查看发行版说明** - 在项目代码中添加日志配置 - 在`application-dev.yaml`中配置数据源 - 使用`SecurityUtils.testPasswordEncode()`测试加解密功能 3. **启动H2服务器** - 创建一个H2服务器 - 设置当前时区 - 获取系统对象并监听pid信息 4. **启动应用程序** - 创建一个Spring Boot应用程序 - 添加`ApplicationPidFileWriter`监听系统pid信息 - 启动应用程序并运行它 **使用说明** 1. 创建一个名为`springboot-sample`的项目 2. 在项目中添加以下依赖项: ``` org.springframework.boot spring-boot 2.7.5 ``` 3. 配置数据库连接并设置密码 4. 创建一个简单的控制器以测试数据库连接 5. 在`application-dev.yaml`中配置数据源 6. 使用`SecurityUtils.testPasswordEncode()`测试加解密功能 7. 启动H2服务器 8. 启动应用程序 **注意** * 该示例使用的是H2数据库。您可以根据需要更改数据库类型。 * 您可以根据需要修改代码以添加其他功能,例如JWT授权或数据加密。

正文

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();
    }

     

与Springboot简单功能示例-6 使用加密数据源并配置日志相似的内容:

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

博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。【本节完成】配置logback;配置了数据源,对数据库账号密码进行加密;增加了系统启动配置

Springboot简单功能示例-1 实现基本WEB服务

博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。 其中博主还将尝试统一异常处理、自定义加密认证、代码自动生成等功能

Springboot简单功能示例-2 KEY初始化功能和全局错误处理

博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。【本节完成】KEY初始化功能和全局错误处理

Springboot简单功能示例-3 实现基本登录验证

博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。【本节完成】使用spring-security6.1.3,抛弃了WebSecurityConfigurerAdapter的配置方式,直接使用session实现基本的登录验证功能

Springboot简单功能示例-4 自定义加密进行登录验证

博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。【本节完成】使用bcprov-jdk18on的sm2加密算法对用户密码进行签名及认证

Springboot简单功能示例-5 使用JWT进行授权认证

博主尝试通过gitee的发行版,使用Springboot为基础框架,逐步整合JWT、JPA、VUE等常用功能项目。【本节完成】使用JWT规范完成登录、确权、登出等操作,分别对html请求和json请求进行处理

简单进行Springboot Beans归属模块单元的统计分析方法

简单进行Springboot Beans归属模块单元的统计分析方法 背景 基于Springboot的产品变的复杂之后 启动速度会越来越慢. 公司同事得出一个结论. beans 数量过多会导致启动速度逐渐变慢. 之前同事写过功能进行分析. 但是本着能不影响产品就不影响产品. 我想通过其他方式进行处理.

SpringBoot+mail 轻松实现各类邮件自动推送

一、简介 在实际的项目开发过程中,经常需要用到邮件通知功能。例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多。 早期的时候,为了能实现邮件的自动发送功能,通常会使用 JavaMail 相关的 api 来完成。后来 Spring 推出的 JavaMailSender 工具,进

SpringBoot内置tomcat启动过程及原理

作者:李岩科 1 背景 SpringBoot 是一个框架,一种全新的编程规范,他的产生简化了框架的使用,同时也提供了很多便捷的功能,比如内置 tomcat 就是其中一项,他让我们省去了搭建 tomcat 容器,生成 war,部署,启动 tomcat。因为内置了启动容器,应用程序可以直接通过 Mave

[转帖]Skywalking学习及整合springboot

目录 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要特性 4. Skywalking架构简介 5. Spring Cloud与Skywalking实战 5.1 Skywalking部署构建 5.3 Spring Cloud整合Skywalking实