log4j mysql 异步_spring boot:配置druid数据库连接池(开启sql防火墙/使用log4j2做异步日志/spring boot 2.3.2)...
一,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)...相关推荐
- SpringBoot精通系列-开发案例之配置Druid数据库连接池
导语 在使用SpringBoot的时候默认情况下提供了若干的数据库连接池,例如(dbcp,dbcp2,tomcat,hikari)等等,当然并不支持我们接下来所说的Druid,Druid是来自与阿 ...
- spring boot 集成druid数据库连接池,并打印sql
spring boot 2.x 集成druid pom文件配置 <dependencies><dependency><groupId>org.springframe ...
- Spring Boot 2.0.5 配置Druid数据库连接池
配置文件: 配置类: pom文件:
- SpringBoot中使用 Druid 数据库连接池, 后台SQL监控无效
首先说下环境和配置, 问题 环境 SpringBoot: 2.3.4.RELEASE druid-spring-boot-starter: 1.1.22 配置 yaml文件配置 datasource: ...
- Spring Boot 使用 Druid 连接池详解
Spring Boot 使用 Druid 连接池详解 Alibaba Druid 是一个 JDBC 组件库,包含数据库连接池.SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过严苛的 ...
- spring boot、mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问
spring boot.mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问 1.原理实现介绍 本质来说使用连接池是为了节省创建.关闭数据库连接的资源消耗,从而提 ...
- springboot中配置mybatis数据源,使用阿里的 Druid 数据库连接池
参考了很多文章,记录下自己的学习过程! 参考:https://blog.csdn.net/weixin_40776321/article/details/99633110 1. 在pom.xml中添加 ...
- spring boot配置druid(德鲁伊)
spring boot配置druid(德鲁伊) 关于druid的介绍请看 阿里巴巴温少访谈 1.引入相关依赖,全部依赖是上一篇spring boot+mybatis依赖的基础上,再加上下边的依赖,如下 ...
- Spring Boot之使用阿里巴巴Druid数据库连接池(数据源)
作者:谭东 Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容数据库,包括了Oracle.MySQL.PostgreSQL.SQL Server.H2等.D ...
最新文章
- c#如何用一个程序打开另一个程序(如:窗体的注销重启)
- 如何查看一个命令是否被修改过
- 使用async await 封装 axios
- 数据结构学习笔记(三):队列(queue)
- 《Python游戏编程快速上手》第十章TicTacToe
- JS中URL编码解码
- 《Effective Java》—— 对于所有对象都通用的方法
- 阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设
- loadrunner之java协议脚本编写
- Java 中的5个代码性能提升技巧,最高提升近10倍
- TIM SWEENEY:引擎及图形学的未来
- mysql csv 表头_Mysql实例mysql 导出CSV文件 并带表头的方法
- 菜鸟javascript整理2
- vue-json-excel前端导出excel教程
- 火狐修复神秘的严重漏洞,同时影响Chrome 浏览器
- mysql快速部署主从复制
- 「裸奔」的数据隐私!
- java mavenpom_java-使用pom-packaging Maven项目作为依赖项
- mac os安装Windows系统失败后不能合并为一个分区
- OpenCV里的常用Rect用法
热门文章
- VSS 数据库地址批量更改器 - VSS Database Changer
- html文件的获取,获取html文件Java
- 传统新年元旦海报设计,必备高品质吉祥图案背景
- UI素材|网站404页面有什么用处
- UI设计APP素材可编辑模板|底部标签式导航
- UI设计线框图可编辑模板,临摹学习设计要点
- 佳能hdr_多方位升级 佳能发布数码单反相机新品EOS 850D
- python编写学生选课系统程序_python面向对象编程小程序- 选课系统
- centos7 docker安装_Centos7 安装 Docker
- Linux开机启动过程(16):start_kernel()->rest_init()启动成功