• 记一次 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:
    HandlerMethodArgumentResolverCompositeresolveArgument处加断点,开始跟踪调试
    这里很关键,千头万绪从这里开始,为什么是这里?参考的上边的博文

    断点跟踪情况:
    (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多方法,最后才知道谁才是爹

    作者:往霄龙
    求其上者得其中,求其中者得其下
  • 相关阅读:
    xrdp远程桌面连接出现Problem Connecting错误
    Sublime Text 破解
    Termux中安装codeserver
    前端开发一份学习线路图
    IDEA激活码,激活教程 Java大师
    Navicat 15 最新破解版下载_永久激活注册码(附图文安装教程) Java大师
    springboot处理blog字段 Java大师
    Yarn, JavaScript包管理器
    css3一些容易忘记的属性整理
    Moment.js日期库
  • 原文地址:https://www.cnblogs.com/JQKA/p/12073444.html
Copyright © 2020-2023  润新知