You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Spring Boot 2.0遇XStream安全框架未初始化问题求助

解决XStream Security framework未初始化的问题

这个错误是因为XStream 1.4.7及以后版本默认强制要求初始化安全框架,目的是防范反序列化漏洞。如果没有配置安全权限,XStream就会抛出这个提示,说明当前处于不安全状态。

针对你使用XStreamMarshaller的场景,解决方案是在创建Marshaller Bean时,手动获取XStream实例并配置安全白名单。下面是修改后的完整代码示例:

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.NoTypePermission;
import org.springframework.oxm.xstream.XStreamMarshaller;
import org.springframework.context.annotation.Bean;
import java.util.HashMap;
import java.util.Map;

@Bean
public XStreamMarshaller sparkyMarshaller() {
    Map<String, Class<?>> myMap = new HashMap<>();
    myMap.put("Sparky", Sparky.class);

    XStreamMarshaller xstreamMarshaller = new XStreamMarshaller();
    xstreamMarshaller.setAliases(myMap);
    xstreamMarshaller.setSupportedClasses(Sparky.class);

    // 获取XStream实例并配置安全框架
    XStream xstream = xstreamMarshaller.getXStream();
    // 先禁用所有未明确允许的类型(最安全的做法)
    xstream.addPermission(NoTypePermission.NONE);
    // 允许Sparky类进行序列化/反序列化
    xstream.allowTypes(new Class[]{Sparky.class});
    
    // 如果你的业务中还用到了其他类(比如集合、自定义的其他实体),需要一并添加到白名单
    // 示例:允许java.util包下的所有类(如果用到的话)
    // xstream.allowTypesByWildcard(new String[]{"java.util.**"});

    return xstreamMarshaller;
}

关键说明:

  1. NoTypePermission.NONE:这一步是禁用所有类型的反序列化,确保只有你明确添加的类才能被处理,最大化安全性。
  2. allowTypes:精确指定允许的类,这里添加了你的Sparky类,如果后续有其他需要序列化的类,都要在这里补充。
  3. allowTypesByWildcard:如果需要允许某个包下的所有类,可以用这个方法,比如java.util.**,但建议尽量精确指定类,避免扩大权限范围。

如果后续运行中遇到类似Caused by: com.thoughtworks.xstream.security.ForbiddenClassException的错误,只需要把报错的类也添加到allowTypes或者allowTypesByWildcard的列表中即可。

内容的提问来源于stack exchange,提问作者LetsBeFrank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:27:38