今天使用xstream解析xml文件,遇到一个特别隐蔽的问题,花费了几乎两个小时才解决。因此,记录一下,帮助其他遇到类似问题的同行们。...刚开始通过spring boot启动一个web服务,访问一个指定url,在controller层会去解析一个xml文件,并进行其他业务处理。...查找了各种方法,文章都没有解决问题。后来出于方便测试,不用每次都起spring boot服务,就把解析xml的方法写在一个mian方法里面了,执行,马上成功了。...以为解决了问题,结果回到web应用,问题依然存在。 通过这个过程,突然想到会不会是spring boot导致的?于是就针对这方面进行搜索排查。还真找到了一篇类似的文章。...()); 问题完美解决。
1,要解析的xml文件文件 xml="<apps \n" + " <app \n" + " <id 1</id \n" + " <name burn</name \n" + " <version...double getSize() { return size; } public void setSize(double size) { this.size = size; } } } } 3,开始xml解析...XStream xStream=new XStream(); xStream.processAnnotations(AppBean.class);//声明使用注解的类 AppBean ab2= (AppBean...) xStream.fromXML(xml);//xml-- Bean,只能解析为对象,不能解析为集合 String xml=xStream.toXML(AppBean.class)//Bean-- xml...以上这篇android 使用XStream解析xml的实例就是小编分享给大家的全部内容了,希望能给大家一个参考。
安全框架 - XStream 提供了一个公平控制有关解组的类型,以防止操纵输入安全问题。...错误消息 - 出现异常是由于格式不正确的XML时,XStream 抛出一个统一的例外,提供了详细的诊断,以解决这个问题。 另一种输出格式 - XStream 支持其它的输出格式,如 JSON。...> 记住以下步骤 创建 XStream 对象 XStream xstream = new XStream(new StaxDriver()); 序列化对象到 XML // Object...xstream.aliasPackage("my.company.xstream", "com.yiibai.xstream"); XStream 注解 XStream 支持使用注解做同样的任务。...xstream.processAnnotations(Student.class); 或者 xstream.autodetectAnnotations(true); XStream高级 XStream
xstream; static { //创建一个XStream实例并指定一个XML解析器 xstream = new XStream(new DomDriver()); } //初始化转换对象...xstream.aliasField("id", User.class, "userId"); xstream.aliasField("userName", User.class, "name...实例并指定一个XML解析器 xstream = new XStream(new DomDriver()); xstream.processAnnotations(LoginLog.class);...//注册自定义的日期转换器 xstream.registerConverter(new DateConverter(Locale.SIMPLIFIED_CHINESE)); } 问题:书上没有无参构造方法...: public class ObjectStreamSample { private static XStream xstream = new XStream(); //Java对象转化为XML
XStream概述 XStream的特点 XStream架构 Converters 转换器 IO 输入输出 Context 上下文引用 Facade 统一接口 Quick Start 加入Maven...高速稳定:解析速度快,占用内存少 灵活转换:转换策略都是可以定制的,允许自定义类型存储为指定的XML格式 易于集成:通过实现特定的接口,可以直接和其他任何树形结构进行序列化与反序列化操作 等等…… 具体参见官网说明...; static { // 创建一个Xstream实例,并指定一个XML解析器 xstream = new XStream(new DomDriver());...> com.xgj.oxm.xstream.quickDemo.domain.User> 小结 我们在实例化Xstream的时候,指定了一个Dom XML解析器 xstream = new XStream...(new DomDriver()); 如果不指定,默认为XPP(XML Pull Parser),一种高速解析XML文件的方式,速度比传统方式快很多 。
加入pom com.thoughtworks.xstream xstream 1.4.3 最简单的使用方式 XStream xStream = new XStream(); //声明XStream注解来源...xStream.processAnnotations(FuiouResponse.class); //xml 转bean Object o = xStream.fromXML(xmlStr); //bean...转xml xStream.toXML(response) 需要指明注解 /** * @author laoliangliang * @date 2018/11/6 17:00 */ @XStreamAlias
导读 别名配置的三种情况 官方Demo 问题 Model A Simple Test Class aliasing Field aliasing Implicit Collections Attribute...xstream; static { // 创建一个Xstream实例,使用默认的XPP解析器 xstream = new XStream();...---- 官方Demo 问题 假设我们有如下的XML,我们如何使用XStream去读写呢?...Blog#writer字段同义为author 问题 : how does XStream converts an Author in a String so it can be written as a...; XStream xstream = new XStream(); xstream.alias("blog", Blog.class); xstream.alias
概述 示例 示例源码 概述 XStream不但可以通过编程的方式对XML进行转换,而且支持基于注解的方式。...; public class Test { private static XStream xstream; static { xstream = new XStream...比如 xstream.processAnnotations(User.class); xstream.processAnnotations(LoginLog.class); 手工注册User和LoginLog...XStream除了手工注册外,还提供了一个自动检测标注了XStream注解的java对象的方法Xstream#autodetectAnnotations(true),不仅方便,而且提供了缓存机制缓存所有标注了...XStream注解的Java对象。
别名的配置是非常重要的,但是其中有些细节问题很重要,在例子中会专门做详细说明。 ...因此,尽量避免在别名中实用任何符号,却是需要下划线的时候,可以考虑实用连接符“-”,这个没有问题。...xStream = new XStream(); output(0, xStream, person); /************** 设置类别名 ****************/ xStream.alias...对象xStream System.out.println(xStream.fromXML(person_xml).toString()); System.out.println(xStream.fromXML...static void output(int i, XStream xStream, Object obj) { String xml = xStream.toXML(obj); System.out.println
很显然,我们应该使用基于流而非DOM的XML解析器读取XML,以提高性能。 创建一个输出流,我们不得不提到HierarchicalStreamWriter....XStream默认提供了几个常用的实现类用于输出,比如CompactWriter和PrettyPrintWriter。...java.io.ObjectOutputStream; import java.io.PrintWriter; import java.util.Date; import com.thoughtworks.xstream.XStream...; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.xgj.oxm.xstream.quickDemo.domain.LoginLog...XStream xstream; static { xstream = new XStream(); } /** * *
import java.util.Date; import java.util.Locale; import com.thoughtworks.xstream.XStream; import com.xgj.oxm.xstream.quickDemo.domain.LoginLog...static XStream xstream; static { // 创建一个Xstream实例,使用默认的XPP解析器 xstream = new XStream...(); // (1)设置类别名,修改默认的全限定名的名称 xstream.alias("user", User.class); xstream.alias...ConversionException(e.getMessage(), e); } return calendar.getGregorianChange(); } } 解析...创建一个Xstream实例,使用默认的XPP解析器 xstream = new XStream(); // (1)设置类别名,修改默认的全限定名的名称
; import com.thoughtworks.xstream.annotations.XStreamImplicit; @XStreamAlias(value="address-book")...java.io.OutputStreamWriter; import java.util.List; import java.util.Scanner; import com.thoughtworks.xstream.XStream...; import com.thoughtworks.xstream.io.xml.DomDriver; public class Test { public static void main(String...xs=new XStream(new DomDriver()); xs.processAnnotations(Address.class); OutputStreamWriter osw=...xs=new XStream(new DomDriver()); xs.processAnnotations(Address.class); InputStreamReader isr=null
XStream总体主要由上图所示的五个接口和抽象类组成。其中, AbsractDriver是为XStream提供解析器和编辑器的创建的抽象类。...XStream默认使用的解析器是XppDriver(这也就解释为了什么XStream使用默认的构造方法创建XStream对象的时候,需要依赖Xpp类库—如果没有导入对应版本的Xpp类库是会报错的) MarshallingStrategy...对象对应的属性参数逐个读取并按照指定的数据格式进行组合,最后整合成我们需要的XML或JSON数据格式;依此类推,解组过程就可以理解成是将xml或JSON数据按照节点的方式进行JavaBean类对象属性的读取解析过程...()方法进行解析,并未依赖Xpp3类库的解析方法) 执行完上面的无参构造方法后,执行参数带有接口反射提供者、Mapper、解析器对象的构造方法中,这次创建了一个扩展类加载器对象(编组或解组过程中,用来尝试加载特性的类...反序列化漏洞的原因就是对重写readObject()方法调用的时候,黑名单控制不严格问题主要引起漏洞形成的。
0x02 漏洞概述 编号:CVE-2020-26258,CVE-2020-26259 2020年12月14日,XStream 发布了XStream 反序列化漏洞的风险提示。...在pom.xml中,添加XStream依赖: <!...到这里,我们在新建的XStream项目中引入了XStream依赖 简单使用 新建一个Test.java文件,内容如下: import com.thoughtworks.xstream.XStream...xstream = new XStream(); //XML序列化 String xml = xstream.toXML(bean); System.out.println...0x06 修复方式 将XStream升级到最新版本。
"; // 响应消息类型:图文 public static final String RESP_MESSAGE_TYPE_NEWS = "news"; /** * 解析微信发来的请求...public static Map parseXml(HttpServletRequest request) throws Exception { // 将解析结果存储在...使其支持CDATA */ private static XStream xstream = new XStream(new XppDriver() { public HierarchicalStreamWriter...required .class files 三、原因 The type org.xmlpull.v1.XmlPullParser cannot be resolved.告诉我们,是因为xmlpull的问题...原因在于,XStream只是一个jar文件,但是它里面会依赖一个jar包,依赖的jar包是:xmlpull_1_0_5.jar、只要把这个jar包引入之后,问题即可解决
1.概述 JMeter生成和解析jmx文件主要是通过XStream库来实现的。 SaveService类将XStream进行了代码封装。...安全框架 - XStream 提供了一个公平控制有关解组的类型,以防止操纵输入安全问题。...错误消息 - 出现异常是由于格式不正确的XML时,XStream 抛出一个统一的例外,提供了详细的诊断,以解决这个问题。 另一种输出格式 - XStream 支持其它的输出格式,如 JSON。...对象,用于解析和存储测试jmx文件和测试报告 // 解析和存储测试jmx文件 private static final XStream JMXSAVER = new XStreamWrapper(new...类 重写Xstream类,解析和转换xml private static final class XStreamWrapper extends XStream { private
》 0x02 调试环境准备 因为要在本地调试,没必要再过一遍springboot 索性就直接写代码用Xstream解析poc 创建maven项目,引入XStream ?...直接主函数里定义xml调用Xstream解析poc ?...import com.thoughtworks.xstream.XStream; public class Main { public static void main(String[] args...= new XStream();; XStream xstream = new XStream(); xstream.fromXML(xml); } } 然后就可以开始愉快的调试了...0x03 漏洞分析 参考大佬的经验总结,XStream产生漏洞的主要问题就在于: XStream在处理实现了Serializable接口和没有实现Serializable接口的类生成的对象时,方法是不一样的
2 xml头声明不强制,可有可无,建议加上 3 所有xml都必须是成对标签 4 标签名大小写敏感(区分大小写) 5 标签不能交叉 6 特殊字符需要转义,在xml中需要转义的字符有 XML解析方式...main(String[] args) { User user = new User("lanweihong", "lwhhhp@gmail.com"); //创建解析...XML对象 XStream xStream = new XStream(); //设置别名, 默认会输出全路径 xStream.alias("User", User.class)...lanweihong", "lwhhhp@gmail.com"); XStream xStream = new XStream(); //声明XStream注解来源 xStream.processAnnotations...* @return */ public static T parseFromXml(Class clazz, String xml) { //创建解析
易于人阅读和编写,同时也易于机器解析和生成。...值1, 值2 ,值3 ] 数组结构 组合后复杂格式 [{name:'aaa'}, {name:'bbb'}, {name:ccc}] 表示三个对象数组 JSON应用场景: AJAX请求参数和响应数据 问题...的使用 问题:服务器端如何将java对象,生成XML格式数据?...XStream主要完成Java对象的序列化(xstream-1.3.1.jar)以及解析(xpp3_min-1.1.4c.jar) 2) XStream的核心方法 Ø xStream.toXML(obj...):将对象序列化XML Ø xStream.fromXML(inputStream/xml片段):将xml信息解析成对象 Ø xStream.alias(String name,Class):将类型解析或者序列化时
今天给大家介绍,XStream是一个简单易用的开源java类库,在解析XML文本时使用黑名单机制来防御反序列化漏洞,但之前的版本黑名单存在缺陷所以造成反序列化命令执行错误,下午具体来看一下复现过程吧。...0x00简介 XStream是一个轻量级、简单易用的开源Java类库, 它主要用于将对象序列化成XML(JSON)或反序列化为对象。...0x01漏洞概述 XStream 在解析XML文本时使用黑名单机制来防御反序列化漏洞, 但是其 1.4.15 及之前版本黑名单存在缺陷, 攻击者可利用javax.naming.ldap.Rdn$RdnEntry...0x02影响范围 Xstream<=1.4.15 0x03环境搭建 文件:docker-compose.yml version: '2' services: web: image: vulhub/xstream...的安全框架为允许的类型使用白名单 注册自己的转换器,以防止解组当前已知的Java运行时关键类型 升级XStream到最新版本 *本文章仅供技术交流分享,请勿做未授权违法攻击,雨笋教育不负任何责任。
领取专属 10元无门槛券
手把手带您无忧上云