首页 > 编程知识 正文

fastjson反序列化漏洞,json反序列化泛型

时间:2023-05-06 04:51:55 阅读:145954 作者:1558

分析JSON并将其转换为相应的数据结构。

例如,简单对象或复杂的通用对象

直接转换常规对象

a=JSON.parseobject(str,A.class ); 如果Map是通用对象,则直接转换不正确

如果需要MapString,则string mapa=JSON.parse object (str,Map.class )//结果是TypeReference,而不是所需的格式。

混叠映射,字符串映射=JSON object.parse object (str,new TypeReferenceHashMapString,string ) ) ); //其他类型的对象enjoyresponsedtoenjoypageresponsedatadtolongresult=JSON object.parse object (str, newtypereferenceenjoyresponsedtoect//或type结构包括参数enjoyresponsedtoenjoypageresponsedatadtotresult=JSON object.parse obbobt

示例: enjoyresponsedtoenjoypageresponsedatadtolongresult=JSON object.parse object (str,newtypereferencenjoyresponsedtoensedtoengrent

(enjoyresponsedtoenjoypageresponsedatadtotresult=JSON object.parse object (str,newtypereferencenjoyresponsedtoenjoypect

TypeReference 使用的两种方式,有参或者无参

上面的 无参 构造方法 里面 获取了 参数泛型 (ParameterizedType),后面的 有参 构造方法 用参数 替换了参数泛型中是泛型变量 里面的 内容。

如果t是通用变量,则之后未传递的限定参数t将被识别为t的上边界。 (根据t的定义,T extends Number T被识别为Number,如果是T T,则被识别为Object。 )

以下示例是执行未知的通用用法

publicclasstestjson { @ testpublicvoidtest () {A a=new A ); 数据d=新数据(; 数据D2=新数据(; 简单数据,数据SD=new simple数据(; sd.data=d; sd.data2=d2; stringstr=JSON.tojsonstring(SD; system.out.println(str; SimpleDataData,datadata=a.getdata(str; system.out.println (数据; }}class A extends BData,Data {}abstract class BT,R {public SimpleDataT,rgetdata{stringstr}{/*此时t为未知类型,直接使用无引用t型为JSON object */return JSON.parse object (str,new TypeReferenceSimpleDataT,r ) gettype(0)、gettype(1) } ); (/)通用实际类型(/protectedtypegettype(intindex ) ) { Type superClass=getClass ).getGenericSuperclass ); type type=(参数化类型) superClass ).getActualTypeArguments ) [index]; 返回类型; }}class Data {public String a='1'; 公共字符串b='2'; }/*通用数据*/class SimpleDataT,r {公共t data; 公共r数据2; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。