今天在進行壓測的時候,由於需要使用到json進行傳參,並且需要在JMeter中加入少量的JSON,由於JSON在java中呈現鍵值對的形式,並且需要使用到“”來修飾,導致只能使用\進行轉義,在發送請求的時候,還需要對相關數據進行RSA加密,很奇怪的事情發生了,編寫了三個json,有兩個json發送到后台后,是正常的可以進行RSA加簽以及驗簽的,有一個JSON死活都過不去。
發現問題:一段JSON通過加簽,正常,發送到服務器后,進行驗簽操作的時候,出現,驗簽不通過。
解決問題:
1. 檢查公私鑰是否正確,由於分析前兩個秘鑰是正常的,可以排除秘鑰不一致的問題
2. 是否由於驗證簽名方法出現了問題?檢查方法后發現沒有問題
3. 檢查JSON是否出現問題?初步檢查沒有問題;
JOSN通過轉化后出現如下圖
"{\"sequenceNo \":\"201806050054"+vars.get("quotaNo")+"\"," + "\"ts\":\"1318041322348\"}"
4. 再次檢查JSON后發現,在sequenceNo 前面有一個空格,沒有發現
5. 刪除空格后,驗證后成功
問題分析:
1. 由於在JSON中存在空格,暫時沒有發現導致,為什么會出現這種問題?有以下幾個原因:
接口文檔中存在空格;
由於源文檔中存在空格是沒有問題的,但是由於在后台處理的時候,將其通過fastjson轉換成了Object類,由於轉換后又將Object序列化層JSON字符串后,導致空格丟失,再進行驗證RSA時候導致驗證不通過,導致出現上述問題。
總結:
1. 謹慎使用JSON字符串進行拼接。
2. 如果需要轉換成JSON字符串,最好采用工具進行轉換,防止此次問題的發生