记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver
情况描述
前端输入框输入中文的横线 —— ,到后台接收时变成了 &madsh;$mdash

正常应该显示成这样:

bug调试思路记录
最开始完全没有向调试源码方面想,试了不少方法,都没解决,没办法了只能源码跟踪排查问题。
想着那个类是解析参数的?加个断点调试下就清除了,问题是不清楚到底是哪个类。so,search
开始
步骤1:搜索一下 : spring 参数解析
结果很多,看了很多博文之后,参考博客地址
发现了 HandlerMethodArgumentResolver

这里有两个函数,其中resolveArgument是 负责解析request中的参数,赋给controller
//负责解析request中的参数,赋给controller
Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;
步骤2:
在HandlerMethodArgumentResolverComposite的resolveArgument处加断点,开始跟踪调试
这里很关键,千头万绪从这里开始,为什么是这里?参考的上边的博文

断点跟踪情况:
(1)

(2)InvocableHandlerMethod

(3)

(4)

(5)

(6)

(7)

(8)

(9)

我们关注的是remark中的——,F6执行for循环,直接到remark
(10)

(11)

(12) 这一步,参数发生变化



(13)

(14)

附XSS攻击介绍博文:XSS攻击
(15)

(16)

以上步骤是最后总结出来的,第一遍调试不知道参数到哪里发生变化了,所以还有很多方法F5进入看了看,
跟着断点一个方法一个方的过,最后发现在执行完这个方法后,原来的——变为了 &madsh
convertedValue = doConvertValue(oldValue, convertedValue, requiredType, editor);
总结
这个bug花了一上午才找出原因...
首先是刚刚接手对项目不熟悉,不知道BaseController中有 initBinder配置
再者也是不知从何入手调试,源码调试经验不足
花里胡哨各种搜索,试了n多方法,最后才知道谁才是爹
记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver的更多相关文章
- 【接口参数解析BUG】SpringMVC接口参数解析
今天遇到一个BUG,前端传递数字数组时,后端使用字符串类型去接收,结果无法接收到,代码如下 问题: GET请求: 前端: configJsonArray:[1,2] 后端: private Strin ...
- spring 自定参数解析器(HandlerMethodArgumentResolver)
https://blog.csdn.net/u010187242/article/details/73647670
- SpringBoot系列教程web篇之如何自定义参数解析器
title: 190831-SpringBoot系列教程web篇之如何自定义参数解析器 banner: /spring-blog/imgs/190831/logo.jpg tags: 请求参数 cat ...
- SpringBoot系列: Java应用程序传参和SpringBoot参数文件
===========================向java 程序传参的几种形式:===========================1. 使用 OS 环境变量. 这个不推荐. 2. 使用JVM ...
- springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)
上一篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)中我们已经介绍了参数解析相关的东西,并且也提到了HandlerMethodArgume ...
- 【问题】【SpringBoot】记一次springboot框架下用jackson解析RequestBody失败的问题
最近项目中遇到了一个问题,费好大劲才发现问题所在,并且修复了问题,下面分享一下这个问题的定位和修复的新路旅程. 先说下背景:该项目用的是SpringBoot框架,主要功能为对外提供一些Restful ...
- SpringBoot系列教程web篇之Post请求参数解析姿势汇总
作为一个常年提供各种Http接口的后端而言,如何获取请求参数可以说是一项基本技能了,本篇为<190824-SpringBoot系列教程web篇之Get请求参数解析姿势汇总>之后的第二篇,对 ...
- SpringBoot系列教程web篇之Get请求参数解析姿势汇总
一般在开发web应用的时候,如果提供http接口,最常见的http请求方式为GET/POST,我们知道这两种请求方式的一个显著区别是GET请求的参数在url中,而post请求可以不在url中:那么一个 ...
- SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)
SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver) 简介 我们 Controller 用到的一些 Bean 需要通过一定的方式去获取的 ...
随机推荐
- java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/
出现这个异常原因可能很多: 1.编码问题 2.没有加载类驱动:换一种数据库的连接方式,就忘了这个:Class.forName(driverclass); import java.io.IOExcept ...
- 十二 Spring的AOP开发入门,整合Junit单元测试(AspectJ的XML方式)
创建web项目,引入jar包 引入Spring配置文件
- c++继承:公有、私有、保护(对应p12访问限制)
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...
- 学习笔记(2)- BioBERT
Jinhyuk Lee, Wonjin Yoon, Sungdong Kim, Donghyeon Kim, Sunkyu Kim, Chan Ho So, Jaewoo Kang, BioBERT: ...
- Linux命令:grep命令 | egrep命令
grep:文本搜素工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能被模式所匹配到的行 包含三个命令:grep.egrep(相当于grep -E 扩展的正则表达式)和fgrep(相当于grep ...
- 手机wifi的mac地址是什么??
简单来说,每个能够接入网络的设备,无论是平板.手机.电脑.电视都有一个专门的序号,这个序号就被称为MAC,正常来说可以看做是这款设备的唯一标识,手机里的MAC其实是特指Wi-Fi无线网卡的MAC地址. ...
- 「CF1037D」Valid BFS?
传送门 Luogu 解题思路 考虑直接模拟 \(\text{BFS}\) 的过程. 对于每一个节点的儿子,先遍历在输入序列中靠前的,判断 \(\text{BFS}\) 是否匹配即可. 细节注意事项 注 ...
- Py西游攻关之基础数据类型(二)-列表
Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html 五 List(列表) OK,现在我们知 ...
- 122、Java面向对象之直接输出对象本身
01.代码如下: package TIANPAN; class Book { public void print() { // 调用print()方法的对象就是当前对象,this就自动与此对象指向同一 ...
- Flask - 请求扩展,钩子函数(Django的中间件) --> 请求前,中,后,
例子1. 处理请求之前 @app.before_request 在请求之前,这个被装饰的函数会被执行 用户登录验证代码可以在这里写 @app.before_request def process_re ...