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

打印 上一主题 下一主题

主题 910|帖子 910|积分 2730

springboot-sample

介绍

springboot简单示例 跳转到发行版 查看发行版说明
软件架构(当前发行版使用)


  • springboot
  • hutool-all 非常好的常用java工具库 官网 maven
  • bcprov-jdk18on 一些加密算法的实现 官网 maven
  • h2 纯java的数据库,支持内存、文件、网络数据库 官网 maven
安装教程
  1. git clone --branch 6.使用加密数据源并配置日志 git@gitee.com:simen_net/springboot-sample.git
复制代码
 功能说明


  • 配置logback
  • 配置了数据源,对数据库账号密码进行加密
  • 增加了系统启动配置
发行版说明

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

配置logback

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


  • application-dev.yaml中配置数据源
    1. # spring基本配置
    2. spring:
    3.   # 数据库连接池配置
    4.   datasource:
    5.     driver-class-name: org.h2.Driver
    6.     # 使用H2数据库,此处不配置url,在com.strong.config.DataSourceConfig中配置本地目录数据库
    7.     # url: jdbc:h2:mem:simen
    8.     # url: jdbc:h2:./simen
    9.     username: BKkV4rITSiMsMBEZtIoNeLivkfJYjRNPJjX0EJ21hxMQ/oflQL5Qk3u8B7RhqfD+KIkOkPHDSNx3c67q78lTwLqTOCuYkltDI2R9kES3d4yXb+bFxtXAm9qs7m+EMLX85MRX
    10.     password: BDNZEUz2C0XDhU0y3OtKUCVkoLKVlTo5EXEIhBtKHwAGT5heBYyKkkd0I5J8A1PBRGkczhA86MqI2SQTXXuJ+b+ki4jqhlNhELG+ts6T/VZugd6pKs5bbqcSDWqT5s0XEpbgJ1Ah7aE56AbazjVaBX5U3FsEU/KhWHQ3qx0KoN47
    11.     # 连接池类型
    12.     type: com.alibaba.druid.pool.DruidDataSource
    13.     # 参数配置
    14.     druid:
    15.       # 初始化时建立物理连接的个数
    16.       initialSize: 5
    17.       # 最小连接池数量
    18.       minIdle: 20
    19.       # 最大连接池数量
    20.       maxActive: 50
    21.       # 获取连接时最大等待时间,单位:毫秒
    22.       maxWait: 60000
    23.       # 是否缓存PSCache,PSCache对支持游标的数据库性能提升巨大
    24.       poolPreparedStatements: true
    25.       # 启用PSCache,必须配置大于0
    26.       maxPoolPreparedStatementPerConnectionSize: 20
    27.       # 用来检测连接是否有效的sql
    28.       validationQuery: select 1
    29.       # 检测连接是否有效的超时时间,单位:秒
    30.       validationQueryTimeout: 5
    31.       # 申请连接时执行validationQuery检测连接是否有效,会降低性能
    32.       testOnBorrow: false
    33.       # 归还连接时执行validationQuery检测连接是否有效,会降低性能
    34.       testOnReturn: false
    35.       # 申请连接的时候检测连接是否有效
    36.       testWhileIdle: true
    37.       # 空闲时间超过minEvictableIdleTimeMillis,是否强制keepAlive
    38.       keepAlive: false
    39.       # 空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接,单位是毫秒
    40.       timeBetweenEvictionRunsMillis: 60000
    41.       # 连接保持空闲而不被驱逐的最小时间,单位毫秒
    42.       minEvictableIdleTimeMillis: 30000
    43.       # 物理连接初始化的时候执行的sql。
    44.       connectionInitSqls: select 0
    45.       # 常用的插件有:监控统计用的filter:stat、日志用的filter:log4j、防御sql注入的filter:wall
    46.       filters: stat,wall,slf4j
    47.       # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    48.       connectionProperties: |-
    49.         druid.stat.mergeSql=false;
    50.         druid.stat.slowSqlMillis=5000
    复制代码
     
  • 增加数据库配置DataSourceConfig,对账号密码进行加密,解决项目源码提交到公共git造成账号密码泄露的问题。
    1. /**
    2. * 从默认参数配置数据源
    3. *
    4. * @return {@link DataSource}
    5. */
    6. @Bean
    7. @ConfigurationProperties(prefix = "spring.datasource.druid")
    8. public DataSource getDataSource() {
    9.     DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
    10.     // 如果是H2数据库,则注入加载
    11.     if (StrUtil.equals(org.h2.Driver.class.getName(), driverClassName)) {
    12.         // 配置数据库URL
    13.         String strJdbcUrl = "jdbc:h2:tcp://localhost:9092/" +
    14.                 StrongUtils.getStaticPath(STR_DIRECTORY_STATICS, databaseName);
    15.         druidDataSource.setUrl(strJdbcUrl);
    16.         log.info("成功连接H2数据库[{}]", strJdbcUrl);
    17.     }
    18.     // 使用私钥解密账号密码,注入数据源
    19.     druidDataSource.setUsername(SM2_OBJ.decryptStr(username, KeyType.PrivateKey));
    20.     druidDataSource.setPassword(SM2_OBJ.decryptStr(password, KeyType.PrivateKey));
    21.     return druidDataSource;
    22. }
    复制代码
     

    • 使用DruidDataSource从application-dev.yaml中加载数据源配置参数DruidDataSource druidDataSource = DruidDataSourceBuilder.create().build();
    • 在使用H2数据库时,使用项目名为数据库名,数据库文件保存在当前项目所在目录中的static中
    • application-dev.yaml中读取加密后的数据库账号密码,使用私钥解密后注入数据源

系统启动配置


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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表