dubbo序列化问题之 Serialized class cn.demo.vo.testDto is not in allow list. Current mode is `STRICT`

文章讲述了在使用ApacheDubbo与Fastjson进行序列化时遇到IllegalArgumentException的问题,原因是序列化的类不在安全白名单中。解决方法是在resource/security目录下创建serialize.allowlist文件,并添加需要序列化的类全路径。实测通过配置已解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Caused by: java.lang.IllegalArgumentException: [Serialization Security] Serialized class cn.demo.vo.testDto is not in allow list. Current mode is `STRICT`, will disallow to deserialize it by default. Please add it into security/serialize.allowlist or follow FAQ to configure it.
    at org.apache.dubbo.common.serialize.fastjson2.Fastjson2SecurityManager$Handler.apply(Fastjson2SecurityManager.java:143)
    at com.alibaba.fastjson2.JSONReaderJSONB.readAny(JSONReaderJSONB.java:733)
    at com.alibaba.fastjson2.JSONReaderJSONB.readAny(JSONReaderJSONB.java:930)
    at com.alibaba.fastjson2.reader.ObjectReaderImplObject.readJSONBObject(ObjectReaderImplObject.java:328)
    at com.alibaba.fastjson2.reader.ORG_1_6_DataReturn.readJSONBObject(Unknown Source)
    at com.alibaba.fastjson2.JSONB.parseObject(JSONB.java:540)

出现这种问题解决办法就是在 resource 下新建一个文件夹security 然后在 security 文件夹下新建 serialize.allowlist文件如resource/security/serialize.allowlist

在serialize.allowlist写入允许的类的全路径 例如cn.demo.vo.testDto

实测通过

<think>嗯,用户遇到了Dubbo在STRICT模式下反序列化报错的问题,提示类不在允许列表里。我需要帮他找到解决方法。首先,根据引用[1],问题是因为默认的STRICT模式禁止反序列化不在白名单中的类。解决方案应该是将需要的类添加到serialize.allowlist里。 用户可能需要知道如何配置这个白名单。根据引用[3],例子是在文件中写入全路径类名。那具体应该怎么操作呢?可能需要说明配置文件的路径和格式,比如在resources目录下创建dubbo目录,然后添加serialize.allowlist文件,每行一个类名。 另外,用户可能不知道如何切换模式到WARN或DISABLE,虽然不建议,但有时候临时解决可能需要。引用[1]提到有三种模式,可以说明通过设置dubbo.application.serialization-security-level参数来调整。 还有,用户可能想知道如何验证配置是否正确生效,可能需要建议重启应用并测试反序列化是否成功。同时,提醒用户注意安全风险,特别是使用非STRICT模式时的潜在问题。 需要分步骤说明,先加白名单,再可选改模式。最后给出注意事项,确保用户明白安全性。可能还需要检查类路径是否正确,避免拼写错误。引用中的例子是cn.demo.vo.testDto,要提醒用户替换为自己的类名。 总结步骤:配置白名单文件、修改模式(可选)、验证和注意事项。这样用户就能一步步解决问题了。</think>### 解决方案:Dubbo STRICT模式反序列化报错处理 #### 1. 问题原因分析 Dubbo 3.x版本默认启用**STRICT**安全模式,严格限制反序列化操作仅允许白名单(`serialize.allowlist`)中定义的类。若反序列化时遇到未明确允许的类,会抛出`Serialized class [类名] is not in allow list`异常[^1][^2]。 #### 2. 配置步骤 ##### 方法1:添加类到白名单文件 1. **创建/修改白名单文件** 在项目资源目录(`src/main/resources`)下创建文件: ```plaintext META-INF/dubbo/org.apache.dubbo.common.serialize.SerializationSecurityChecker ``` 文件内容为需要允许的类全限定名,每行一个类,例如: ```plaintext cn.demo.vo.testDto com.example.model.User ``` 2. **配置加载路径验证** 确保白名单文件位于正确的类路径位置,Dubbo会自动扫描`META-INF/dubbo`目录下的配置[^3]。 ##### 方法2:调整安全模式(非推荐,需评估风险) 修改Dubbo全局配置,将安全模式调整为**WARN**(仅记录警告)或**DISABLE**(完全禁用检查): ```properties # application.properties dubbo.application.serialization-security-level=WARN ``` **注意**:此方法会降低安全性,仅在测试环境临时使用[^1]。 #### 3. 验证配置 1. 重启Dubbo服务,触发反序列化操作。 2. 检查日志中是否仍存在`not in allow list`错误。 3. 若使用**WARN**模式,确认日志中是否生成对应的类加载警告信息。 #### 4. 安全建议 - **最小化白名单**:仅添加业务必需的类,避免通配符或范围过大的包路径。 - **定期审计**:检查白名单中是否存在废弃类或潜在风险类。 - **依赖管理**:确保第三方依赖库的序列化类已明确授权[^3]。 #### 5. 补充说明 - **优先级规则**:白名单配置优先级高于全局模式设置。 - **动态更新**:部分Dubbo版本支持通过管理接口动态更新白名单,减少重启次数。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值