项目源码路径:https://github.com/Syske/learning-dome-code.git
前言

随着需求和技术的日益革新,spring boot框架是越来越流行,也越来越多地出现在我们的项目中,当然最主要的原因还是因为spring boot构建项目实在是太爽了,构建方便,开发简单,而且效率高。今天我们并不是来专门学习spring boot项目的,我们要讲的是数据源的加密和监控,监控到好说,就是不监控也没什么问题,但是数据源加密却涉及到我们的系统安全。对于平时的学习测试,我们在项目中配置数据库明文密码是没什么问题的,因为我们的数据不重要,也就无所谓,但是在现实环境下的生产平台,配置明文密码极有可能会造成我们数据库密码泄露,最终导致我们的生产数据泄露,这也就体现了生产环境数据源加密的必要性。下面我们就来看看如何实现数据源加密吧。

创建spring boot项目

创建过程就不赘述了,下面是我的项目依赖:

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0modelVersion>     <parent>         <groupId>org.springframework.bootgroupId>         <artifactId>spring-boot-starter-parentartifactId>         <version>2.2.1.RELEASEversion>         <relativePath/>      parent>     <groupId>io.githu.syskegroupId>     <artifactId>druid-datasouce-decryptartifactId>     <version>0.0.1-SNAPSHOTversion>     <name>druid-datasouce-decryptname>     <description>Demo project for Spring Bootdescription>     <properties>         <java.version>1.8java.version>     properties>     <dependencies>         <dependency>             <groupId>org.springframework.bootgroupId>             <artifactId>spring-boot-starter-webartifactId>         dependency>         <dependency>             <groupId>org.mybatis.spring.bootgroupId>             <artifactId>mybatis-spring-boot-starterartifactId>             <version>2.1.1version>         dependency>         <dependency>             <groupId>mysqlgroupId>             <artifactId>mysql-connector-javaartifactId>             <scope>runtimescope>         dependency>                  <dependency>             <groupId>com.alibabagroupId>             <artifactId>druid-spring-boot-starterartifactId>             <version>1.1.10version>         dependency>         <dependency>             <groupId>org.springframework.bootgroupId>             <artifactId>spring-boot-starter-testartifactId>             <scope>testscope>             <exclusions>                 <exclusion>                     <groupId>org.junit.vintagegroupId>                     <artifactId>junit-vintage-engineartifactId>                 exclusion>             exclusions>         dependency>     dependencies>     <build>         <plugins>             <plugin>                 <groupId>org.springframework.bootgroupId>                 <artifactId>spring-boot-maven-pluginartifactId>             plugin>         plugins>     build> project>

如果你的数据库是Oracle,那么你要把mysql的数据库驱动替换成Oracle驱动

修改spring boot项目配置信息
 server:   port: 8083

我采用的是yaml的方式,然后启动你的项目,因为没有controller和其他的代码,所以没什么效果,但是项目可以正常启动。

加密数据源密码,创建publickey

这里没什么好讲的,我直接放代码:

 import org.junit.Test; /**  * @program: druid-datasouce-decrypt  * @description:  * @author: liu yan  * @create: 2019-12-02 18:34  */ public class DBencrydtTest {     @Test     public void test() {         String[] args = {"root"};         try {             com.alibaba.druid.filter.config.ConfigTools.main(args);         } catch (Exception e) {         }         System.out.println();     } }

需要说明的是,args数组中放置的是密码,直接运行上面的代码,你会看到控制台会打印如下信息:

 privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqboz+iNXPv1jgKAhDW7W+L/NwqG6GDTo49BjmlMg3WxBg4w9h4RC3oRO40EOjL7+DtEBBlCZ6OHZfZWKh17FmwIDAQABAkA/azwQszPebX/IiAzRoCDjQYf4ucV3Vg3PUgZlm7okAbsXrxz2xrdnM8Er08YKm3vUOmWQmSvaOI3CqdrK1f2BAiEA4XbEkCOxWVxbDLihyudClvrgLbZZrqw2SDF4dsfgXMCIQDAtvMeJiXlGQBxFr/ci0r99FiYUeag/ZFwOjyhIzWBOQIgYg3bEqzTNn/aAUBS7QGCjlLxKDBD//7/L7nRwI9O6k0CIQCdBnUiY8MM4UpS206JzZXVR3vI4TMiinovD8THJ4E5QQIgRM1QlD1PG5YTxBxZMrLm2weBxsqXhvdJuTc1GXmoUxg= publicKey:MFwwDQYJKoZIhvcNAWFS4dfBAKm6M/ojVz79Y4CgIQ1u1vi/zcKhuhg06OPQY5pTIN1sQYOMPYeEQt6ETuNBDoy+/g7RAQZQmejh2X2ViodexZsCAwEAAQ== password:O9JBjc86r9IhEoIE6jevJtgsgCXZAKCWH2UtO0tbG62zqIK5G5qJOCm1u9ju+lnno15vmq+TO5WqEWGzvkDNGg==

privateKey是你的私钥,publicKey是公钥,password就是你加密后的密码。我们用到的配置有两个,一个是公钥,一个是密码,配置公钥的原因是要通过公钥进行解密。将如上信息保存好,后面再spring boot的配置中要用到。

增加数据源相关配置

增加数据源配置信息:

 
# 阿里巴巴druid数据源配置 spring:   datasource:   # 数据源驱动类型,这里是druid     type: com.alibaba.druid.pool.DruidDataSource     # sql脚本编码     sql-script-encoding: utf-8     druid:     # 驱动的类名       driver-class-name: com.mysql.cj.jdbc.Driver       # 数据库连接密码       username: root       # 数据库地址       url: jdbc:mysql://127.0.0.1:3307/spring?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai       # 这里配置的是前面我们生成的密码       password: Y2YOft/vPjw/JFPkevqZZKi8pCHu5ambR2ivSxgipTbL76pOoxNw3Un5Hcarbe9AqUImr+wS7YI6TjJZOVYjzA==       # 这里设置连接配置,key配置的是我们前面生成的publicKey       connection-properties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJI/xqbyvpVttxfAKulKeSTIb7tZAGaFcPyTnE2r7AHTQ8kOnqKXDda4u59umt9XBFxi7db28KxeVooB138zuRUCAwEAAQ==       filter:         config:         # 启用druid的拦截器           enabled: true       # 连接池的配置信息       # 初始化时建立物理连接的个数       initial-size: 3       # 连接池最小连接数       min-idle: 3       # 连接池最大连接数       max-active: 20       # 获取连接时最大等待时间,单位毫秒       max-wait: 60000       # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。       test-while-idle: true       # 既作为检测的间隔时间又作为testWhileIdel执行的依据       time-between-connect-error-millis: 60000       # 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接       min-evictable-idle-time-millis: 30000       # 用来检测连接是否有效的sql 必须是一个查询语句       # mysql中为 select 'x'       # oracle中为 select 1 from dual       validationQuery: select 'x'       # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true       test-on-borrow: false       # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true       test-on-return: false       # 是否缓存preparedStatement,mysql5.5+建议开启       pool-prepared-statements: true       # 当值大于0时poolPreparedStatements会自动修改为true       max-pool-prepared-statement-per-connection-size: 20       # 合并多个DruidDataSource的监控数据       use-global-data-source-stat: false       # 配置扩展插件       #监控统计拦截的filters       filters: stat,wall,slf4j       # 通过connectProperties属性来打开mergeSql功能;慢SQL记录       connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000       # 定时输出统计信息到日志中,并每次输出日志会导致清零(reset)连接池相关的计数器。       time-between-log-stats-millis: 300000       # 配置DruidStatFilter       web-stat-filter:         enabled: true         url-pattern: '/*'         exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*'       # 配置DruidStatViewServlet       stat-view-servlet:         # 是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)         enabled: true         url-pattern: '/druid/*'         # IP白名单(没有配置或者为空,则允许所有访问)         allow: 127.0.0.1,192.168.0.1         # IP黑名单 (存在共同时,deny优先于allow)         deny: 192.168.0.128         # 禁用HTML页面上的“Reset All”功能         reset-enable: false         # 登录名         login-username: admin         # 登录密码         login-password: admin

上面备注已经很详细了,这里要强调的有两个地方,一个是key那里配置的是publicKey,不要配错了,一个是要注意 validationQuery这里mysql和Oracle是不一样的,当然你要可以移除该配置。上面还加了数据源监控的配置信息,注释已经够详细了。以上配置完成后就可以启动你的项目了,如果没有报错,那说明你的配置没有问题,如果启动的时候报错,说明你的配置有问题。项目启动后,要进入druid数据源监控页面,只需要输入如下你的项目地址+/druid即可,比如我的地址:

 http://localhost:8083/druid

然后输入你在配置信息里面加入的用户名和密码,你就可以看见监控页面了,如果要查看sql相关监控信息,你还要完善自己的项目,引入mybatis,配置你的sql。

结语

至此,我们的项目就已经完成了,根据以上过程,我们发下数据源加密和监控的核心是要添加正确的配置信息。如果在实际开发过程中发下错误,最主要的还是要检查我们的配置是否正确。

项目源码路径:https://github.com/Syske/learning-dome-code.git

推荐阅读

1. 手动创建spring boot项目2. 啥?你还不会创建spring项目!!!3学习资源分享4. java后端学习流程

5. spring零配置AOP踩坑指南

6. xStream踩坑指南

7. shiro入门笔记之第一个demo创建8. shiro与spring项目整合9. spring boot日志及Log4j日志配置10. spring项目基于aop的日志记录方式实现



Copyright ©2019 云中志

springboot默认数据源如何设置连接数_spring boot基于DRUID数据源密码加密及数据源监控实现...相关推荐

  1. springboot默认数据源如何设置连接数_Spring Boot系列之配置数据库连接池

    在实际的应用开发中,与数据库交互通常使用数据库连接池来重用Connection对象,减少资源消耗. Spring Boot 的数据源是自动配置的.在 Spring Boot 2.2.1 版本中,有几种 ...

  2. java 数据源监控_spring boot基于DRUID实现数据源监控过程解析

    这篇文章主要介绍了spring boot基于DRUID实现数据源监控过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 随着需求和技术的日益革新 ...

  3. druid 连接池的释放 配合上spring bean销毁_spring boot基于DRUID数据源密码加密及数据源监控实现...

    项目源码路径:https://github.com/Syske/learning-dome-code.git 前言 随着需求和技术的日益革新,spring boot框架是越来越流行,也越来越多地出现在 ...

  4. springboot日志配输出路径配置_Spring Boot 日志配置方法(超详细)

    默认日志 Logback : 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台.在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了. 从上图 ...

  5. maven springboot 除去指定的jar包_Spring Boot打包瘦身 Docker 使用全过程 动态配置、日志记录配置...

    springBoot打包的时候代码和jar包打包在同一个jar包里面,会导致jar包非常庞大,在不能连接内网的时候调试代码,每次只改动了java代码就需要把所有的jar包一起上传,导致传输文件浪费了很 ...

  6. java datasource 配置_Spring boot 基于注解方式配置datasource

    Spring boot 基于注解方式配置datasource Xml配置 我们先来回顾下,使用xml配置数据源. 步骤: 先加载数据库相关配置文件; 配置数据源; 配置sqlSessionFactor ...

  7. druid java直接调用_Spring Boot使用Druid连接池的示例代码

    Druid是Java语言中最好的数据库连接池.Druid相比于其他的数据库连接池,有两大特性: 监控数据库,有利于分析线上数据库问题 更容易扩展,同时也很高效. 今天演示一下Spring Boot集成 ...

  8. SpringBoot使用druid的密码加密

    1.springboot默认连接池 习惯使用springboot的小伙伴通过开始学习springboot链接数据库时,都会尝试着官方文档来 学习,所以springboot默认支持的数据库连接池c3p0 ...

  9. Druid数据库密码加密 包含单数据源密码加密,多数据源密码加密详细配置

    发个牢骚 网上虽然有很多相关文章,但是我各种翻看文章依然是各种bug层出不穷,所幸最后终于摸索出了答案,我的第一篇博客应运而生.. 开工 别慌,看到我这篇文章,你的问题就迎刃而解了 一.获取公钥和加密 ...

最新文章

  1. 【Qt】Qt再学习(二):Bars Example(Q3DBars)
  2. php post 获取xml,php 获取post的xml数据并解析示例
  3. Nemuria UML架构图 第3次迭代. 重构
  4. Redis(十三):Redis实现乐观锁
  5. Qt文档阅读笔记-Qt Quick 3D - Simple Example解析
  6. Hadoop和Spark的异同
  7. 【渝粤教育】国家开放大学2018年秋季 0248-21T电工电子技术 参考试题
  8. VMware三种工作模式
  9. 极客大学产品经理训练营 产品思维和产品意识(上) 第3课总结
  10. 基于spring websocket实现广播及点对点推送功能
  11. 图形学基础——伽马校正
  12. wireshark密码嗅探侵入后台管理系统
  13. Noi 十连测 Zbox loves meizi
  14. 学术论文中的“重点与难点”怎么写?
  15. 【深入理解TcaplusDB技术】详细介绍TDR表数据类型
  16. yy欢聚时代软件测试笔试题
  17. 四级网络工程师试题二
  18. HTTP返回代码 201 304 404 500等代表的含义
  19. (一)Ubuntu安装详细教程(从镜像制作到NVIDIA驱动安装全流程)——超详细的图文教程
  20. GIS基础知识-名词解释

热门文章

  1. ARIMA+参数选择p+d+q
  2. 生信人的linux考试
  3. 从入门到精(fang)通(qi)第5期 我们的征途是星辰大海
  4. Nanopore测序
  5. RNA-seq最新利器——全长转录组测序
  6. Jupyter Notebook各种使用方法记录
  7. What is Mahalanobis distance? 马氏距离
  8. 分割候选区域--FastMask: Segment Multi-scale Object Candidates in One Shot
  9. LeetCode 316. Remove Duplicate Letters--贪心--Java,C++,Python解法
  10. mysql建索引 字段截取_提高MySQL索引策略一:隔离查询列