分析方法:

在 GenericTokenParser这个类的parse方法的这一行下个断点调试一下就明白了

builder.append(handler.handleToken(content));

#{} 和${}采用不同的handler来处理。

${}处理如下:
@Override
public String handleToken(String content) {
Object parameter = context.getBindings().get("_parameter");
if (parameter == null) {
context.getBindings().put("value", null);
} else if (SimpleTypeRegistry.isSimpleType(parameter.getClass())) {
context.getBindings().put("value", parameter);
}
Object value = OgnlCache.getValue(content, context.getBindings()); 这里获取到到用户输入的参数值直接拼接到SQL里
String srtValue = (value == null ? "" : String.valueOf(value)); // issue #274 return "" instead of "null"
checkInjection(srtValue);
return srtValue;
}
#{} 的处理如下:
@Override
public String handleToken(String content) {
parameterMappings.add(buildParameterMapping(content));
return "?"; 返回个问号拼接到SQL里,问号的值后边set进去,所以就避免了注入
}
 

最新文章

  1. 今天不谈技术,说说一些常用的软件~By 逆天
  2. Android网络编程1
  3. Electronic Payment App analysis
  4. core dump gdb调试
  5. CodeForces 359D (数论+二分+ST算法)
  6. hdu 2883 kebab 网络流
  7. 【NPOI】.NET EXCEL导入导出开发包
  8. [Java] HashMap、TreeMap、Hashtable排序
  9. mysql慢速查询
  10. 【规律】【贪心】【数学】HDU 5573 Binary Tree
  11. win7 PHP7.0的PDO扩展
  12. 重绘(redraw或repaint),重排(reflow)
  13. 博弈论中的Nim博弈
  14. 【学习总结】GirlsInAI ML-diary day-14-function函数
  15. EF简单的CURD操作
  16. 增长java中数组的长度
  17. 最简单的java浏览器
  18. Golang 笔记 4 defer、error、panic
  19. MySQL查看当前的连接信息
  20. Java中equals()和hashCode()的关系以及重写equals()和hashCode()的重要性

热门文章

  1. 浏览器地址栏输入url回车之后发生了些什么
  2. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数
  3. 201871010102-常龙龙《面向对象程序设计(java)》第八周学习总结
  4. 搭建pikachu平台及暴力破解
  5. 每天一道Rust-LeetCode(2019-06-06)
  6. Leetcode61.旋转链表
  7. nwjs-简介
  8. B1047 编程团体赛 (20 分)
  9. B1020 月饼(25分)
  10. [LeetCode] 925. Long Pressed Name 长按键入的名字