情況描述
前端輸入框輸入中文的橫線 —— ,到后台接收時變成了 &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多方法,最后才知道誰才是爹
