XStream官网

新版本的变化

从九年前的 1.14.12 版本开始,XStream 包含一个 安全框架,用于在反序列化时为允许的类型实现黑名单或白名单。在 1.4.17 版本之前,XStream 保留了一个默认的黑名单,以拒绝用于各种安全攻击的所有类型的 Java 运行时,以保证现有用户的最佳运行时兼容性。然而,这种方法已经失败。过去几个月已经表明,仅 Java 运行时就包含数十种可用于攻击的类型,甚至没有查看类路径上的第 3 方库。因此,新版本的 XStream 现在默认使用白名单,这也是目前优先推荐的方式。它也一直在控制台上抱怨第一次运行时未初始化的安全框架。任何遵循建议并为自己的场景初始化安全框架的人都可以轻松更新到新版本,没有任何问题。其他所有人现在都必须进行适当的初始化,否则新版本在反序列化时肯定会失败。

问题来源

原来的序列化代码在更新为1.4.18后,由于没有引入白名单,导致代码报错。需要添加白名单即可。

解决方案

关键代码:添加白名单

Class<?>[] classes = new Class[] { TestBody.class};
xStream.allowTypes(classes);

以下为测试用例代码,直接可运行。

import com.thoughtworks.xstream.XStream;public class Test {public static void main(String[] args) {XStream xStream = new XStream();String xmlStr = "<receipt>\n" +"<receiptNo>1234567</receiptNo>\n" +"<distributeNo></distributeNo>\n" +"<warehouseNo>123</warehouseNo>\n" +"<erpWarehouseNo></erpWarehouseNo>\n" +"<receiptType>123</receiptType>\n" +"<source>123</source>\n" +"<partnerNo>123</partnerNo>\n" +"<clpsWarehouseNo>123</clpsWarehouseNo>\n" +"</receipt>";xStream.alias("receipt", TestBody.class);xStream.ignoreUnknownElements();xStream.ignoreUnknownElements();Class<?>[] classes = new Class[] { TestBody.class};xStream.allowTypes(classes);TestBody soOrderReceipt = (TestBody) xStream.fromXML(xmlStr);System.out.println((soOrderReceipt.toString()));}}

注意事项

如果添加以上代码未能解决问题,则需要注意xStream对象是否为同一对象,请仔细对比以上测试用例代码

com.thoughtworks.xstream.security.ForbiddenClassException com.thoughtworks.xstream 1.4.18相关推荐

  1. xstream异常com.thoughtworks.xstream.security.ForbiddenClassException

    最近项目使用到webservice调用厂商的接口,遇到的需要解析错误信息的需求,于是对于错误信息的解析使用比较暴力方式:使用XStream直接手动解析错误消息到对象. 在解析的过程中遇到了com.th ...

  2. 项目将com.thoughtworks.xstream升级到1.4.18遇到的问题:com.thoughtworks.xstream.security.ForbiddenClassException

    项目开发需求将xstream从1.4.17升级到1.4.18,升级后遇到了序列化问题,描述如下: om.thoughtworks.xstream.security.ForbiddenClassExce ...

  3. xStream:Security framework of XStream not initialized, XStream is probably vulnerable

    今天在做微信公众号开发的时候,在解析xml的时候有一个红色的警告:大致的意思是说,XStream 的安全框架没被初始化,xstream 容易受攻击,这是一段红色的提示,实际使用过程中也没有大的问题.但 ...

  4. xStream:Security framework of XStream not initialized, XStream is probably vulnerable.

    意思是:xstream 的安全框架没有初始化,xstream 容易受攻击. 解决方法:xStream对象设置默认安全防护,同时设置允许的类 XStream xStream = newXStream() ...

  5. XStream介绍与使用

    简介 XStream是Java类库,用来将对象序列化成XML (JSON)或反序列化为对象.XStream是自由软件,可以在BSD许可证的许可下分发. XStream在运行时使用Java反射机制对要进 ...

  6. 数字电路:五分钟计时器_井字游戏:它是什么计时器?

    数字电路:五分钟计时器 Hi everybody, I'm Riccardo. Senior iOS Engineer at Bending Spoons, I breathe iOS develop ...

  7. 微信公众平台开发中-SAE不支持XStream框架的解决方案

    问题描述 最近几天(2014年8月20日之后),突然有不少网友反应,柳峰博客中的微信公众平台开发代码在SAE上运行会报错,或者是能正常部署,但向公众号发消息没反应.以前也有一些初学者质疑过我博客中的代 ...

  8. xstream不映射字段_这本XStream学习手册,真的不来看看?

    一.前言 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单的基于Java的类库,用来将Java对象序列化成XML(JSON ...

  9. XStream学习手册

    ​ 一.前言 关注微信公众号回复[源码]获取文章中源码,以及封装的工具类 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单 ...

  10. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

最新文章

  1. ArcGIS问题:如何定义坐标系
  2. Hadoop中Context类的作用和Mapper<LongWritable, Text, Text, LongWritable>.Context context是怎么回事【笔记自用】
  3. 15.PAE分页(2-9-9-12)
  4. 非常有趣的古越及吴语-台州话
  5. Linux 从源码编译安装 OpenSSL
  6. 受困版权,有情怀的网易云音乐还能走多远?
  7. eclipse 插件扩展新建java页面_java-Eclipse插件:创建动态菜单和相应的处理...
  8. 针对中位数求解的几道题
  9. 面向对象的三个基本特征_杂谈:JavaScript面向对象
  10. 数组模拟栈解决括号匹配
  11. 单片机软件开发心得体会
  12. WidsMob Viewer Pro Mac(照片与视频管理查看工具)
  13. JS中函数式编程基本原理简介
  14. 移动端H5实现手动选择地图点的一种解决方案
  15. FFmpeg循环推流
  16. 2020年再见,2021年你好!
  17. C++打开文件夹中的多个文件并计算文件中数据的平均值
  18. 【ZCMU1600】卡斯丁狗要吃糖葫芦
  19. VvvebJs —— 使用拖拽的方式生成网页
  20. USB限流IC,限流开关保护芯片

热门文章

  1. java实验检查危险品代码_实验报告题目
  2. ALFA | 临床基因组课程 人群频率数据库 新成员
  3. 计算机一级改扩展名,怎么改文件扩展名,教您电脑win7改文件扩展名的方法
  4. CentOS 使用shc加密脚本
  5. windows10+Ubuntu双系统卸载旧Ubuntu并重装Ubuntu(绝对安全)
  6. OpenCv之黑白上色小技巧,奥黛丽赫本神颜,超惊艳滴~
  7. 计算机启动时硬盘指示灯不亮,电脑启动时没有自检声,硬盘指示灯不亮
  8. jsonp 跨域 java_Java web支持jsonp跨域
  9. MTK芯片资料分享,2018MTK芯片资料大全
  10. 北京大学肖臻老师《区块链技术与应用》公开课笔记:以太坊原理(三):智能合约