`

spring 3+ fastjson bug 记录

阅读更多

场景描述:

 使用fastjson的JSON.toJSONString(Domain)的时候,如果Domain中有字段是通过spring proxy出来的,在spring3以上版本会报错,spring3以下不受影响:代理代码如下:

 

        ProxyFactory proxy = new ProxyFactory(Manager);
        proxy.addAdvice(Interceptor);
        return (VO) proxy.getProxy();

   报错如下:

 

Caused by: com.alibaba.fastjson.JSONException: create asm serializer error, class interface org.springframework.aop.Advisor
        at com.alibaba.fastjson.serializer.SerializeConfig.createJavaBeanSerializer(SerializeConfig.java:88)
        at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:455)
        at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:423)
        at com.alibaba.fastjson.serializer.JSONSerializer.writeWithFieldName(JSONSerializer.java:371)
        at Serializer_6.write1(Unknown Source)
        at Serializer_6.write(Unknown Source)
        at com.alibaba.fastjson.serializer.JSONSerializer.writeWithFieldName(JSONSerializer.java:373)
        at Serializer_2.write1(Unknown Source)
        at Serializer_2.write(Unknown Source)
        at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:352)
        at com.alibaba.fastjson.JSON.toJSONString(JSON.java:378)
        at com.alibaba.fastjson.JSON.toJSONString(JSON.java:366)
      
Caused by: java.lang.NullPointerException
        at com.alibaba.fastjson.util.TypeUtils.isJSONTypeIgnore(TypeUtils.java:952)
        at com.alibaba.fastjson.util.TypeUtils.isJSONTypeIgnore(TypeUtils.java:963)
        at com.alibaba.fastjson.util.TypeUtils.computeGetters(TypeUtils.java:827)

 

原理:

spring3以后spring-CORE 里面包含了CGLIB,相关类由

net.sf.cglib.proxy.Factory
变为:
org.springframework.cglib.proxy.Factory

 

假设Domain里面的A这个对象,通过A.getInterface[] 可以看到

 

 spring 3: (java.lang.Class<T>[]) [interface org.springframework.aop.SpringProxy, interface org.springframework.aop.framework.Advised, interface org.springframework.cglib.proxy.Factory]
 spring 2: (java.lang.Class<T>[]) [interface org.springframework.aop.SpringProxy, interface org.springframework.aop.framework.Advised, interface net.sf.cglib.proxy.Factory]  

 

而在fastjsom:JSONSerializer的 472行(21版本)

 

       for (Class<?> item : clazz.getInterfaces()) {
                    if (item.getName().equals("net.sf.cglib.proxy.Factory")) {
                        isCglibProxy = true;
                        break;
                    } else if (item.getName().equals("javassist.util.proxy.ProxyObject")) {
                        isJavassistProxy = true;
                        break;
                    }
                }

 这里会判断失效。导致问题。

 

后续

已报告fastjson团队,目前1.1.40版本任未修复。

 

 

0
0
分享到:
评论

相关推荐

    fastjson-1.2.70.rar

    3. **自动类型转换**:Fastjson具备智能的类型推断机制,能自动将JSON值转换为Java对象的相应类型,如日期、枚举等,大大降低了开发难度。 4. **JSONPath支持**:Fastjson引入了类似于XPath的JSONPath表达式,可以...

    fastjson-1.1.42

    Fastjson 1.1.42 发布了,主要改进内容包括: 1. 修复parser在处理循环引用在某些特定场景下的bug; 2. 支持在Bean上通过JSONType配置...13. 修复spring3代理对象序列化失败的bug。 14. 兼容odps环境JDK

    json 开发 fastjson-1.2.8.jar

    5. **兼容性好**:Fastjson与Java标准库以及各种流行框架(如Spring、MyBatis等)有良好的兼容性。 在实际开发中,Fastjson的常见使用场景包括: - **序列化和反序列化**:将Java对象转换为JSON字符串,然后在网络...

    com.alibaba.fastjson,很方便的包,比较新的包1.2.79

    - `Fastjson`可以轻松地与其他Java框架集成,如Spring、MyBatis等,简化开发流程。 10. **序列化配置** - 用户可以通过注解或配置类来定制序列化和反序列化的行为,比如忽略某些字段、自定义日期格式等。 综上所...

    learnjavabug:Java安全相关的漏洞和技术demo,原生Java、Fastjson、Jackson、Hessian2、XML反序列化漏洞利用和Spring、Dubbo、Shiro、CAS、Tomcat、RMI、Nexus等框架\中间件\功能的exploits以及Java Security Manager绕过、Dubbo-Hessian2安全加固等等实践代码

    该模块主要记录一些fastjson的利用gadget,不过很多gadget并没有记录在案。 RCE相关 package:com.threedr3am.bug.fastjson.rce com.threedr3am.bug.fastjson.rce.FastjsonSerialize(TemplatesImpl) 利用条件:...

    Spring、servlet-api、httpclient tomcat等的jar包和源码

    有tomcat7、dom4j、fastjson、hibernate、httpcomponents-core、mysql-connector-java、servlet-api、shiro、spring4.2的jar包和源码,这对于喜欢跟踪源码来学习和找bug的朋友来说是个好消息!

    springboot整合Jackson实例项目-附工具类

    Jackson是公司中必用的组件之一,常用的还用阿里的Fastjson,但是由于一些原因bug与漏洞是在是太多,在注重安全的公司直接被pass,还有就是谷歌的Gson(这个没用过不太了解)。 Spring MVC 的默认 json 解析器便是 ...

    swallow:spring-boot管理系统开发的一个快速脚手架工程

    RabbitMQ(如果没有会导致登录记录功能无法使用) 后台: SpringMVC Mybatis Freemarker Shiro MybatisPlus RabbitMQ Druid FastJSON Redis Lombok Swagger EhCache activiti 前端: 整体:easyui和ace admin 文件上传...

    阿里巴巴的10款开源项目 (2).docx

    13. **Fastjson**:Fastjson是Java的JSON解析和生成库,性能出色。 14. **Macaroon**:Macaroon是一个高效的反向代理测试套件,使用Python开发,支持跨平台,适用于功能、模块和协议一致性测试。 15. **Uploader**...

    阿里巴巴的10款开源项目.docx

    1. Dubbo:高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。 三、JavaScript 框架 1. KISSY:跨终端、模块化、高性能、使用简单的 JavaScript 框架,...

    dubbo-用户指南.pdf

    10. **Spring整合**:Dubbo与Spring框架深度集成,可以方便地在Spring应用中使用Dubbo服务,通过XML配置或注解方式声明服务提供者和消费者,简化开发流程。 总的来说,《Dubbo用户指南》是学习和掌握Dubbo不可或缺...

    json-lib及其依赖的包

    6. **性能和选择**:虽然JSON-lib是一个广泛使用的库,但随着技术的发展,其他如Gson、Jackson和Fastjson等库也变得流行,它们在性能和易用性方面各有优势。开发者应根据项目需求选择合适的库。 7. **版本更新**:...

Global site tag (gtag.js) - Google Analytics