首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CVE-2021-20289 -从Resteasy 3迁移到RESTEasy > 4.6.0

CVE-2021-20289 -从Resteasy 3迁移到RESTEasy > 4.6.0
EN

Stack Overflow用户
提问于 2022-06-10 10:35:55
回答 1查看 205关注 0票数 0

漏洞扫描系统检测到针对RestEasy 3.7.0: CVE-2021-20289 https://nvd.nist.gov/vuln/detail/CVE-2021-20289的CVE,这说明RESTEasy应该升级到4.6.0以上。但是,这里有一个问题: RESTEasy >4不包含这个子模块。

我注意到在https://developer.jboss.org/en/resteasy/blog/2019/03/28/resteasy-4-is-coming-soon中,有人说

大型resteasy-jaxrs和resteasy-客户端模块已经分为resteasy core-spi,resteasy-client-api,resteasy-core和resteasy-client,第一个和第二个模块被认为是公共模块,我们希望在下一个主要版本之前保持向后兼容性。

如果我注释掉来自pom.xml的resteasy依赖项,我将得到cannot access class org/jboss/resteasy/microprofile/config/ResteasyConfigFactory的错误。但我在resteasy-core-spi或rest-client-api模块中找不到它。最近的是resteasy-4.7.4.Final/resteasy-core-spi/src/main/java/org/jboss/resteasy/spi/config/ConfigurationFactory.java。但是,如果类名改变了,迁移就不容易了。还是我漏掉了什么?

实际上,根据https://issues.redhat.com/browse/RESTEASY-2878的说法,这个CVE是在3.15.2中修正的。所以我迷路了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-14 10:42:19

最后我

  • 从resteasy 3迁移到4,放弃resteasy-jaxrs,将resteasy-client-apiresteasy-client-apiorg.jboss.resteasy.client.jaxrs.ResteasyClientBuilder引入org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl,尽管它在internal包下,但它是一个公共类,Javadoc并不建议直接使用它。这个实现是相当标准的,并且在迁移时引入了最小的部分。我还比较了类中设置的默认值,如connectionPoolSize等,它们与resteasy-jaxrs 3.

中的默认值相同。

代码更改是最小的:

代码语言:javascript
复制
// before
    private ResteasyClient client = new ResteasyClientBuilder()
            .connectionPoolSize(CONNECTION_POOL_SIZE)
            .build();
// after
    private ResteasyClient client = new ResteasyClientBuilderImpl()
            .connectionPoolSize(CONNECTION_POOL_SIZE)
            .build();

供应商:

我正在接收内容类型text/plain。在Resteasy-jaxrs 3中,我使用了ResteasyJackson2Provider,它实现了MessageBodyReaderMessageBodyWriter,并且工作正常。现在,在Restyeasy 4中,内容类型检查似乎更严格了,这个同名类的isReadable()只接受Content-Type of null或包含json。当我收到text/plain时,它就不再工作了。

对于纯文本,我建议使用StringTextStar。在Resteasy 4.7.5中有一个新的类,它似乎起作用了。读取输入流并以字符串形式写入,这正是我所需要的。检查它的推动力。

代码语言:javascript
复制
ResteasyClient client1 = new ResteasyClient()
                          .register(new ResteasyJackson2Provider()) // for JSON
                          .build();
ResteasyClient client2 = new ResteasyClient()
                          .register(new StringTextStar()) // for text/plain
                          .build();

而自动关闭客户:

现在,您需要使用“尝试-最后”或“尝试-带资源”来关闭它。如果不这样做,它将自动关闭,但是您会收到一个警告:Closing an instance of ApacheHttpClient43Engine for you等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72572887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档