谷粒商城遇到的問題


最近在敲到整合分布式事務的時候,發現當觸發自定義的異常時候,重新回退到購物車結算,卻一直報錯 com.alibaba.fastjson.JSONException: autoType is not support

因為在springsession中我用的是fastjson進行序列化的,會讓生成的JSON字符串中含有 @type 的屬性值,在反序列化的時候就會異常。我於是就換了和視頻一樣的方式。

image-20200806225816494

官網解決方法:

打開AutoType功能

在1.2.25之后的版本,以及所有的.sec01后綴版本中,autotype功能是受限的,和之前的版本不同,如果在升級的過程中遇到問題,可以通過以下方法配置。

一、添加autotype白名單

添加白名單有三種方式,三選一,如下:

1. 在代碼中配置

ParserConfig.getGlobalInstance().addAccept("com.taobao.pac.client.sdk.dataobject."); 

如果有多個包名前綴,分多次addAccept

2. 加上JVM啟動參數

    -Dfastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao. 

如果有多個包名前綴,用逗號隔開

3. 通過fastjson.properties文件配置。

在1.2.25/1.2.26版本支持通過類路徑的fastjson.properties文件來配置,配置方式如下:

fastjson.parser.autoTypeAccept=com.taobao.pac.client.sdk.dataobject.,com.cainiao. // 如果有多個包名前綴,用逗號隔開

二、打開autotype功能

如果通過配置白名單解決不了問題,可以選擇繼續打開autotype功能,fastjson在新版本中內置了多重防護,但是還是可能會存在一定風險。兩種方法打開autotype,二選一,如下:

1、JVM啟動參數

-Dfastjson.parser.autoTypeSupport=true

2、代碼中設置

ParserConfig.getGlobalInstance().setAutoTypeSupport(true); 

如果有使用非全局ParserConfig則用另外調用setAutoTypeSupport(true);

三、配置autoType黑名單

打開AutoType之后,是基於內置黑名單來實現安全的,但黑名單是窮舉不完的,如果發現了新的風險類,可以通過以下配置來增加黑名單:

1. 配置JVM啟動參數

-Dfastjson.parser.deny=xx.xxx
  • 這里的xx.xxx是包名前綴,如果有多個包名前綴,用逗號隔開

2. 通過fastjson.properties來配置

在1.2.25之后的版本支持通過類路徑的fastjson.properties文件來配置,配置方式如下:

-Dfastjson.parser.deny=xx.xxx 
  • 這里的xx.xxx是包名前綴,如果有多個包名前綴,用逗號隔開

3. 代碼中配置

ParserConfig.getGlobalInstance().addDeny("xx.xxx");
  • 這里的xx.xxx是包名前綴,如果有多個包名前綴,用逗號隔開

在我之前的博客中,也有簡單的用過:https://www.cnblogs.com/dalianpai/p/11656441.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM