最近两年公司项目dubbo进行升级,从2.5.6升级至2.6.9
至今又升级为2.6.10
主要升级的原因是序列化存在漏洞,需要使用hession协议进行序列化操作。
2.6.9
在2.6.9引入白名单,因为hessian默认支持java.*的所有类进行序列化,所以重写AbstractHessian2FactoryInitializer配置白名单参数
是否开启白名单
*static String WHITELIST = "dubbo.application.hessian2.whitelist";*
白名单允许序列化的类路径
*static String ALLOW = "dubbo.application.hessian2.allow";*
黑名单序列化的类路径
*static String DENY = "dubbo.application.hessian2.deny";*
把所需要的类路径加上,否则会报错heesian序列化异常,如
严重:
com.sinosig.sl.sssc.dto.form.Page's interfaces: java.io.Serializable in blacklist or not in whitelist, deserialization with type 'HashMap' instead.
com.alibaba.com.caucho.hessian.io.HessianFieldException: com.sinosig.sl.sssc.dto.result.ResultDTO.resultValue: java.util.Map cannot be assigned from null
不在名单里,hessian无法进行序列化所以当作hashMap去处理序列化,失败。
升级为2.6.12
dubbo改写了序列化方式,优化了早期的序列化漏洞,引入文件默认配置读取一些文件不允许hessian序列化,本次默认不支持java.*的白名单,需写入自行配置,同2.6.9一样重写AbstractHessian2FactoryInitializer,只是将java.*加入白名单配置即可