一,druid数据库连接池的功能?

1,Druid是阿里巴巴开发的号称为监控而生的数据库连接池

它的优点包括:

可以监控数据库访问性能

SQL执行日志

SQL防火墙

2,druid的官方站:

https://github.com/alibaba/druid/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,演示项目的相关信息:

1,项目地址:

https://github.com/liuhongdi/druid

2,  项目功能说明:

为druid配置log4j2作为日志记录工具,

演示mybatis代码中#和$变量的区别

3, 项目结构:如图:

三,配置文件说明

1,pom.xml

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-logging

com.alibaba

druid-spring-boot-starter

1.1.23

org.springframework.boot

spring-boot-starter-log4j2

com.lmax

disruptor

3.4.2

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.3

mysql

mysql-connector-java

runtime

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.13

说明:关闭了spring-boot-starter-web自带的log功能,

用druid-spring-boot-starter引入druid,

disruptor这个依赖也需要引入,是log4j2使用异步日志中必需的

2,application.properties

#errorserver.error.include-stacktrace=always#errorlogging.level.org.springframework.web=trace

# 数据源基本配置

spring.datasource.username=root

spring.datasource.password=lhddemo

spring.datasource.driver-class-name =com.mysql.cj.jdbc.Driver

spring.datasource.url= jdbc:mysql://127.0.0.1:3306/store?serverTimezone=UTC

spring.datasource.type =com.alibaba.druid.pool.DruidDataSource

# Druid数据源配置

spring.datasource.druid.initialSize= 5spring.datasource.druid.minIdle= 5spring.datasource.druid.maxActive= 20spring.datasource.druid.maxWait= 60000spring.datasource.druid.timeBetweenEvictionRunsMillis= 60000spring.datasource.druid.minEvictableIdleTimeMillis= 300000spring.datasource.druid.validationQuery= SELECT 1FROM DUAL

spring.datasource.druid.testWhileIdle= truespring.datasource.druid.testOnBorrow= falsespring.datasource.druid.testOnReturn= falsespring.datasource.druid.poolPreparedStatements= true# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙

spring.datasource.druid.filters= stat,wall,log4j2

spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize= 20spring.datasource.druid.useGlobalDataSourceStat= truespring.datasource.druid.connectionProperties= druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500#druid sql firewall monitor

spring.datasource.druid.filter.wall.enabled=true#druid sql monitor

spring.datasource.druid.filter.stat.enabled=truespring.datasource.druid.filter.stat.log-slow-sql=truespring.datasource.druid.filter.stat.slow-sql-millis=10000spring.datasource.druid.filter.stat.merge-sql=true#druid uri monitor

spring.datasource.druid.web-stat-filter.enabled=truespring.datasource.druid.web-stat-filter.url-pattern=/*spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*

#druid session monitor

spring.datasource.druid.web-stat-filter.session-stat-enable=true

spring.datasource.druid.web-stat-filter.profile-enable=true

#druid spring monitor

spring.datasource.druid.aop-patterns=com.druid.*

#druid login user config

spring.datasource.druid.stat-view-servlet.login-username=root

spring.datasource.druid.stat-view-servlet.login-password=root

#monintor

spring.datasource.druid.stat-view-servlet.enabled=true

#spring.datasource.druid.stat-view-servlet.url-pattern="/druid/*"

#mybatis

mybatis.mapper-locations=classpath:/mapper/*Mapper.xml

mybatis.type-aliases-package=com.example.demo.mapper

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

logging.config = classpath:log4j2.xml

说明:除了druid的配置,指定了log的配置文件为: log4j2.xml

如果需要查看监控界面,需要设置以下一项:

spring.datasource.druid.stat-view-servlet.enabled=true

大家如果在生产环境中,可以设置它为false,只查看日志文件

使用log4j2日志时,注意spring.datasource.druid.filters 设置为 stat,wall,log4j2

3,log4j2.xml

说明:这里只是举例,直接把日志放到了当前目录,生产环境中建议为日志配置专门的目录

4,数据表的结构:

CREATE TABLE `user` (

`userId`int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',

`username`varchar(200) NOT NULL DEFAULT '' COMMENT 'name',

`password`varchar(100) NOT NULL DEFAULT '' COMMENT 'pass',PRIMARY KEY(`userId`),UNIQUE KEY`username` (`username`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='user'

四,java代码说明:

1,UserController.java

@RestController

@RequestMapping("/user")public classUserController {

@ResourceprivateUserService userService;//mybatis使用#变量

@GetMapping("/login")public Object login(@RequestParam("username") String username,

@RequestParam("password") String password

) {

User userOne=userService.getOneUserByUsernamePassword(username,password);if (userOne == null) {

System.out.println("user is null");

}returnuserOne;

}//mybatis使用$变量

@GetMapping("/login2")public Object login2(@RequestParam("username") String username,

@RequestParam("password") String password

) {

User userOne=userService.getOneUserByUsernamePassword2(username,password);if (userOne == null) {

System.out.println("user is null");

}returnuserOne;

}

}

说明:mybatis在mapper文件中,如果使用$时,属于拼接sql语句,有sql注入的危险,

我们用来检测druid的sql注入检测是否生效

2,UserServiceImpl.java

@Servicepublic class UserServiceImpl implementsUserService {

@ResourceprivateUserMapper userMapper;//mybatis使用#变量

@OverridepublicUser getOneUserByUsernamePassword(String username,String password) {

User userOne=userMapper.selectOneUserByUsernamePassword(username,password);

System.out.println(userOne);returnuserOne;

}//mybatis使用$变量

@OverridepublicUser getOneUserByUsernamePassword2(String username,String password) {

User userOne=userMapper.selectOneUserByUsernamePassword2(username,password);

System.out.println(userOne);returnuserOne;

}

}

3,UserMapper.xml

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from user where username=#{username} and password=#{password}

select * from user where username=${username} and password=${password}

4,User.java

public classUser {//用户id

privateString userId;publicString getUserId() {returnuserId;

}//用户名

privateString username;publicString getUsername() {return this.username;

}public voidsetUsername(String username) {this.username =username;

}

}

五,测试效果

1,打开druid监控界面:

http://127.0.0.1:8080/druid/login.html

输入我们在配置文件中的定义的用户和密码 root/root

登录后可以看到druid的界面:

2,测试sql的注入,检查druid的防火墙效果

http://127.0.0.1:8080/user/login?username=1&password=2 or 1=1 limit 1

返回为空,

查看控制台:

==> Preparing: select * from user where username=? and password=?

==> Parameters: 1(String), 2 or 1=1 limit 1(String)<== Total: 0

可见在mybatis使用#我们输入的注入语句也被作为参数的一部分,

因为mybatis把输入的内容解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,

一个 #{ } 被解析为一个参数占位符,

所以注入是失败的

访问:

http://127.0.0.1:8080/user/login2?username=1&password=2 or 1=1 limit 1

返回:

mybatis在使用$时,是通过拼接字符串来构造sql,

可见我们的sql注入已生效,但因为druid的防火墙机制,导致抛出 sql injection violation

说明druid的防sql注入防火墙是有效的

3,测试过sql注入后,再查看druid中的防火墙页面:

我们使用的注入sql已被添加到了黑名单

六,查看spring boot的版本:

. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| |) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.3.2.RELEASE)

log4j mysql 异步_spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)...相关推荐

  1. SpringBoot精通系列-开发案例之配置Druid数据库连接池

    导语   在使用SpringBoot的时候默认情况下提供了若干的数据库连接池,例如(dbcp,dbcp2,tomcat,hikari)等等,当然并不支持我们接下来所说的Druid,Druid是来自与阿 ...

  2. spring boot 集成druid数据库连接池,并打印sql

    spring boot 2.x 集成druid pom文件配置 <dependencies><dependency><groupId>org.springframe ...

  3. Spring Boot 2.0.5 配置Druid数据库连接池

    配置文件: 配置类: pom文件:

  4. SpringBoot中使用 Druid 数据库连接池, 后台SQL监控无效

    首先说下环境和配置, 问题 环境 SpringBoot: 2.3.4.RELEASE druid-spring-boot-starter: 1.1.22 配置 yaml文件配置 datasource: ...

  5. Spring Boot 使用 Druid 连接池详解

    Spring Boot 使用 Druid 连接池详解 Alibaba Druid 是一个 JDBC 组件库,包含数据库连接池.SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过严苛的 ...

  6. spring boot、mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问

    spring boot.mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问 1.原理实现介绍 本质来说使用连接池是为了节省创建.关闭数据库连接的资源消耗,从而提 ...

  7. springboot中配置mybatis数据源,使用阿里的 Druid 数据库连接池

    参考了很多文章,记录下自己的学习过程! 参考:https://blog.csdn.net/weixin_40776321/article/details/99633110 1. 在pom.xml中添加 ...

  8. spring boot配置druid(德鲁伊)

    spring boot配置druid(德鲁伊) 关于druid的介绍请看 阿里巴巴温少访谈 1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下 ...

  9. Spring Boot之使用阿里巴巴Druid数据库连接池(数据源)

    作者:谭东 Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容数据库,包括了Oracle.MySQL.PostgreSQL.SQL Server.H2等.D ...

最新文章

  1. c#如何用一个程序打开另一个程序(如:窗体的注销重启)
  2. 如何查看一个命令是否被修改过
  3. 使用async await 封装 axios
  4. 数据结构学习笔记(三):队列(queue)
  5. 《Python游戏编程快速上手》第十章TicTacToe
  6. JS中URL编码解码
  7. 《Effective Java》—— 对于所有对象都通用的方法
  8. 阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设
  9. loadrunner之java协议脚本编写
  10. Java 中的5个代码性能提升技巧,最高提升近10倍
  11. TIM SWEENEY:引擎及图形学的未来
  12. mysql csv 表头_Mysql实例mysql 导出CSV文件 并带表头的方法
  13. 菜鸟javascript整理2
  14. vue-json-excel前端导出excel教程
  15. 火狐修复神秘的严重漏洞,同时影响Chrome 浏览器
  16. mysql快速部署主从复制
  17. 「裸奔」的数据隐私!
  18. java mavenpom_java-使用pom-packaging Maven项目作为依赖项
  19. mac os安装Windows系统失败后不能合并为一个分区
  20. OpenCV里的常用Rect用法

热门文章

  1. VSS 数据库地址批量更改器 - VSS Database Changer
  2. html文件的获取,获取html文件Java
  3. 传统新年元旦海报设计,必备高品质吉祥图案背景
  4. UI素材|网站404页面有什么用处
  5. UI设计APP素材可编辑模板|底部标签式导航
  6. UI设计线框图可编辑模板,临摹学习设计要点
  7. 佳能hdr_多方位升级 佳能发布数码单反相机新品EOS 850D
  8. python编写学生选课系统程序_python面向对象编程小程序- 选课系统
  9. centos7 docker安装_Centos7 安装 Docker
  10. Linux开机启动过程(16):start_kernel()->rest_init()启动成功