5.4.3. 其他 RESTEasy 更改


SignedInput 和 SignedOuput
  • 用于 resteasy-crypto SignedInput 和 SignedOutput 必须在 RequestResponse 对象中将 Content-Type 设置为 multipart/signed,或使用 @Consumes@Produces 注释。
  • SignedOutputSignedInput 可用于通过在 @Produces 或 @ Consumes 注释中设置该类型,以二进制形式返回 application/pkcs7-signature MIME 类型格式。
  • 如果 @Produces 或 @Consumestext/plain MIME 类型,则 SignedOutput 将采用 base64 编码并作为字符串发送。
安全过滤器

@RolesAllowed、@PermitAll 和 @ DenyAll 的安全过滤器现在返回"403 Forbidden"而不是 "401 Unauthorized"。

客户端过滤器

当您在 RESTEasy 3.0 之前使用 RESTEasy 客户端 API 时,在 JAX-RS 2.0 中引入的客户端侧过滤器不会被绑定并运行。

异步 HTTP 支持

由于 JAX-RS 2.0 规范添加了使用 @Suspended 注释AsynResponse 接口的异步 HTTP 支持,因此异步 HTTP 的 RESTEasy 专有 API 已被弃用,可能在以后的 RESTEasy 发行版中删除。异步 Tomcat 和异步 JBoss Web 模块已从服务器安装中删除。如果您不使用 Servlet 3.0 容器或更高版本,则将使用相同的请求线程模拟和同步运行异步 HTTP 服务器端处理。

服务器端缓存

服务器端缓存设置已更改。如需更多信息,请参阅 RESTEasy 文档

YAML 提供程序设置更改

在之前的 JBoss EAP 版本中,RESTEasy YAML 提供程序设置默认为启用。这在 JBoss EAP 7 中有所改变。现在默认禁用 YAML 供应商。由于 RESTEasy 用于取消托管的 SnakeYAML 库中存在安全问题,因此不支持使用它,而且必须在应用中明确启用它。有关如何在应用中启用 YAML 提供程序和添加 Maven 依赖项的信息,请参阅为 JBoss EAP 开发 Web 服务应用中的 YAML 提供程序

Content-Type Header 中的默认 Charset UTF-8

自 JBoss EAP 7.1 起,resteasy.add.charset 参数默认设置为 true。如果您不希望 RESTEasy 将 restarset =UTF-8 添加到返回的 content-type 标头中,当资源方法返回 text/* 或 application/xml* 介质类型而无需显式 charset 时,您可以将 resteasy.add.charset 参数设置为 false

如需有关文本媒体类型和字符集的更多信息,请参阅为 JBoss EAP 开发 Web 服务应用中的 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/developing_web_services_applications/#text_media_types_charsets 文本介质类型和字符集

SerializableProvider

从不受信任的来源对 Java 对象进行序列化是不安全的。因此,在 JBoss EAP 7 中,org.jboss.resteasy.plugins.providers.SerializableProvider 类默认为禁用,不建议使用此提供程序。

将请求与资源方法匹配

在 RESTEasy 3 中,对匹配规则的实施进行了改进和更正,如 JAX-RS 规范中所定义。特别是,对如何处理子资源方法上的模糊 URI 以及子资源定位器进行了更改。

在 RESTEasy 2 中,即使存在另一个具有相同 URI 的子资源,子资源定位器也能成功执行。根据规范,此行为不正确。

在 RESTEasy 3 中,当子资源和子资源定位器存在模糊的 URI 时,调用子资源会成功;但是,调用子资源定位器将导致 HTTP 状态 405 Method Not Allowed 错误。

以下示例包含子资源 方法上的模糊 @Path 注释和子资源定位器:注意两个端点( anotherResource 和 anotherResource Locator) 的 URI 都相同。这两个端点之间的区别在于,另一个Resource 方法与 REST 动词 POST 关联。anotherResourceLocator 方法不与任何 REST 动词关联。根据规范,使用 REST 动词的端点(在本例中为 anotherResource 方法)始终会被选择。

@Path("myResource")
public class ExampleSubResources {
    @POST
    @Path("items")
    @Produces("text/plain")
    public Response anotherResource(String text) {
        return Response.ok("ok").build();
    }

    @Path("items")
    @Produces("text/plain")
    public SubResource anotherResourceLocator() {
        return new SubResource();
    }
}
资源方法算法切换

3.0.25 之前的 RESTEasy 3.0.x 版本中使用的资源方法匹配算法中发现了一个错误。Final 会导致 RESTEasy 在响应请求时返回太多资源方法。

匹配算法有三个阶段:

  1. 使用请求路径选择可能的资源类。
  2. 使用请求路径选择可能的资源方法。
  3. 使用 HTTP 动词和介质类型(即将推出)选择最终资源方法。

根据 JAX-RS 2.0 规范,在对潜在资源方法集进行排序后,应当仅将 maximal 元素传递到第 3 步。但是,RESTEasy 3.0.x 实施在 RESTEasy 3.0.25 之前通过所有方法传递到第 3 步。JBoss EAP 7.1.0 中包含的 RESTEasy 3.0.24 显示了这种不正确的行为。

JBoss EAP 7.1.1 中包含的 RESTEasy 3.0.25 提供了相应的修复,以限制为第 3 步传递的方法以符合 JAX-RS 2.0 规范的要求。由于松散行为可能更为可取,因此 RESTEasy 3.0.25 还引入了 context-param 配置选项 resteasy.loose.step2.request.matching( 默认为 false ),可以将其配置为启用旧行为。

如果您将 JBoss EAP 服务器从 7.1.0 更新至 7.1.1,并且您想要保留旧行为并将所有潜在资源方法传递给第 3 步,请将 resteasy.loose.step2.request.matching 选项 设置为 true

JAX-RS 2.1 规范中更改了匹配的算法,将所有匹配资源方法传递到第 3 步。JBoss EAP 7.3 中包含的 RESTEasy 3.9.0 提供了 jaxrs.2.0.request.matching 选项,以保持 JAX-RS 2.0 规范中定义的更严格行为。

如果您将应用从 JBoss EAP 从 7.1.0 迁移到 7.2.x,则资源方法匹配算法的行为不应发生变化。如果您将您的应用从 7.1.1 迁移到 7.2.x 或更高的版本,并希望保留 JAX-RS 2.0 规范中定义的更严格行为,请将 jaxrs.2.0.request.matching 选项设置为 true

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部