最近在敲到整合分布式事務的時候,發現當觸發自定義的異常時候,重新回退到購物車結算,卻一直報錯 com.alibaba.fastjson.JSONException: autoType is not support
因為在springsession中我用的是fastjson進行序列化的,會讓生成的JSON字符串中含有 @type 的屬性值,在反序列化的時候就會異常。我於是就換了和視頻一樣的方式。
官網解決方法:
打開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