java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot SQL监控和密码加密

SpringBoot整合Druid实现SQL监控和数据库密码加密

作者:詩筠

Druid连接池是阿里巴巴开源的数据库连接池项目,Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能,本文给大家介绍了SpringBoot整合Druid实现SQL监控和数据库密码加密,文中有相关的代码示例供大家参考,需要的朋友可以参考下

1 引言

1.1 简介

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。除了提供基本的数据源功能外,还具备以下优势:

1.2 Druid的功能

高效的数据库连接池管理

丰富的监控功能

便捷的配置和扩展

SQL执行日志和统计分析

提高系统安全性

1.3 竞品对比

功能类别功能DruidHikariCPDBCPTomcat-jdbcC3P0
性能PSCache
LRU
SLB负载均衡支持
稳定性ExceptionSorter
扩展扩展FilterJdbcIntercepter
监控监控方式jmx/log/httpjmx/metricsjmxjmxjmx
支持SQL级监控
Spring/Web关联监控
诊断支持LogFilter
连接泄露诊断logAbandoned
安全SQL防注入
支持配置加密

2 准备工作

2.1 项目环境

3 集成Druid

3.1 添加依赖

这里的Druid版本必须要选择1.2.20及以上版本,否则无法运行。

还有一点,Druid的版本要与mysql-connector-java的版本相匹配,可以去下面的网站看:

Maven Repository: com.alibaba » druid » 1.2.20 (mvnrepository.com)

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-3-starter</artifactId>
            <version>1.2.20</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>

3.2 配置Druid

相关配置的详细信息可见:DruidDataSource配置属性列表 · alibaba/druid Wiki (github.com)

spring:
  application:
    name: server
  profiles:
    active: dev # 激活dev配置文件
  datasource:
    url: jdbc:mysql://${voyager.db.host}:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: ${voyager.db.pw}
    # druid 相关参数配置
    druid:
      # 初始化连接大小
      initial-size: 5
      # 最小连接池数量
      min-idle: 5
      # 最大连接池数量
      max-active: 20
      # 获取连接时最大等待时间,单位毫秒
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      # 测试连接
      validation-query: SELECT 1 FROM DUAL
      # 配置监控统计用的filters,过滤掉静态文件
      web-stat-filter:
        # 启用Web统计过滤器
        enabled: true
        # 过滤匹配规则
        url-pattern: /*
        # 过滤忽略的格式
        exclusions: /druid/*,*.js,*.css,*.gif,*.jpg,*.bmp,*.png,*.ico
      # 配置可视化控制台页面
      stat-view-servlet:
        enabled: true
        # 访问Druid监控页面的地址,首页默认是 /druid/index.html
        url-pattern: /druid/*
        # 禁用重置按钮
        reset-enable: true
        # 登录用户名
        login-username: root
        # 登录密码
        login-password: 123456
      # 通过别名的方式配置扩展插件  常用的插件有:监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall 防御sql注入的filter:wall
      filter:
        stat:
          enabled: true
          # 是否开启慢sql
          log-slow-sql: true
          # 是否开启SQL合并
          merge-sql: true
          # 慢sql的时间标准 单位:毫秒
          slow-sql-millis: 1000

3.3 编写测试类测试

注意:不要使用lombok的@RequiredArgsConstructor注解,JUnit5好像无法自动装配。

@SpringBootTest
class SmartApplicationTest {
    
    @Autowired
    private DataSource dataSource ;

    @Test
    void contextLoads() {
        System.out.println(dataSource.getClass());
        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
        System.out.println("druidDataSource.getUrl() = " + druidDataSource.getUrl());
        System.out.println("druidDataSource.getUsername() = " + druidDataSource.getUsername());
        System.out.println("druidDataSource.getInitialSize() = " + druidDataSource.getInitialSize());
        System.out.println("druidDataSource.getMaxActive() = " + druidDataSource.getMaxActive());
    }
  
}

运行测试:

image-20240624182524748

可以看到配置类的相关配置已经生效。

3.4 访问控制台

启动自己项目中的SpringBootApplication类后访问http://localhost:8084/druid/login.html(改为自己服务的端口),输入账号密码后即可进入:

image-20240624183006312

3.5 测试SQL监控

测试接口

@RequestMapping("/user")
@RestController
@RequiredArgsConstructor
public class UserInfoController {

    private final UserInfoService userInfoService;

    @GetMapping("/test")
    public Result<UserInfo> login() {
        return Result.success(userInfoService.getById(1));
    }
    
}

进行测试

image-20240624183953241

3.6 数据库密码加密

3.6.1 执行命令加密数据库密码

官方教程Wiki文档:使用ConfigFilter · alibaba/druid Wiki (github.com)

在命令行中执行如下命令:

java -cp D:\Develop\Maven\mvnRespo\com\alibaba\druid\1.2.20\druid-1.2.20.jar com.alibaba.druid.filter.config.ConfigTools your_password

输出

privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==

3.6.2 配置参数

spring:
  datasource:
    url: jdbc:mysql://${voyager.db.host}:3306/study_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: password  # 修改为控制台输出的password
    #druid数据源配置
    druid:
      # Druid数据源的公钥
      public-key: publicKey # 修改为控制台输出的publicKey
      filter:
        # 启用Druid的过滤器配置
        config: 
          enabled: true
      connect-properties:
        # 启用Druid的连接属性解密功能
        config.decrypt: true
        config.decrypt.key: publicKey # 控制台输出的publicKey

3.6.3 测试

启动启动类,请求测试接口:

image-20240624211333064

4 总结

在这篇文章中,我们详细介绍了如何在Spring Boot项目中集成Druid数据源,并实现SQL监控和数据库密码加密等功能,Druid还有许多有用的功能,这里就不过多展示了,希望本文对大家有所帮助。

以上就是SpringBoot整合Druid实现SQL监控和数据库密码加密的详细内容,更多关于SpringBoot SQL监控和密码加密的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文