OpenJDK
JEP 431,序列集合(Sequenced Collections),在 JDK 21 中已经从 Proposed to Target 状态提升到了 Targeted 状态。该 JEP 提议引入“一个新的接口系列,代表了元素能够以明确的序列或顺序排列在集合中的概念,使其作为集合的结构化属性”。该 JEP 的动机在于集合框架(Collections Framework)中缺乏定义良好的排序和统一操作集。关于 JEP 431 的更多信息,请参阅 InfoQ 的新闻报道。
JEP 443,未命名的模式和变量(Unnamed Patterns and Variables,预览)已经从 JEP Draft 8294349 状态提升到了 Candidate 状态。该预览 JEP 提议“使用未命名模式和未命名参数对语言进行增强,未命名模式与 record 组件匹配,但不用说明组件的名称或类型,未命名参数可以被初始化但不使用”。这两种模式都是由下划线来进行表示的,如r instanceof _(int x, int y)
和r instanceof_
。
JDK 20
甲骨文发布了Java 编程语言和虚拟机的20版本。更多细节请参阅 InfoQ 的新闻报道。
JDK 21
JDK 21 的早期访问构建版本Build 15发布,它是对 Build 14 的更新,包含对各种问题的修复。关于该版本的更多细节,可以参见发布说明。
对于JDK 20和JDK 21,鼓励开发人员通过Java Bug数据库报告缺陷。
Amazon Corretto
亚马逊云科技发布了Amazon Corretto 20,这是他们的 OpenJDK 20 的下游发行版,可用于 Linux、Windows 和 macOS。开发人员可以从该网站下载这个最新版本。
Liberica JDK
与之类似,BellSoft 也发布了 Liberica JDK 20,这是他们的 OpenJDK 20 的下游发行版。开发者可以从该网站下载这个最新版本。
Spring Framework
对于 Spring 项目团队来说,最近是非常忙碌的,他们发布了Spring Boot、Spring Framework、Spring Data、Spring Integration、Spring Vault、Spring for GraphQL、Spring Authorization Server、Spring HATEOAS和Spring Modulith的里程碑版本以及小版本。其中一些版本解决了公共漏洞和暴露(Common Vulnerabilities and Exposure,CVE):
CVE-2023-20859,当撤销令牌失败时,会将敏感信息插入到日志中(Insertion of Sensitive Information into Log Sourced from Failed Revocation of Tokens),该漏洞会在应用试图撤销 Spring Vault 批处理令牌时,将敏感信息插入到日志文件中。
CVE-2023-20860,特殊匹配模式下身份认证绕过漏洞(Security Bypass With Un-Prefixed Double Wildcard Pattern),当 Spring Security 使用MvcRequestMatcher配置并将“**”作为匹配模式时,在 Spring Security 和 Spring MVC 之间会发生模式不匹配,最终可能导致身份认证绕过。
CVE-2023-20861,Spring表达式DoS漏洞(Spring Expression DoS Vulnerability),在该漏洞中,攻击者可以提供特制的Spring表达式语言(SpEL)的表达式,从而可能导致拒绝服务(Denial-of-Service)的情况。
Spring Boot 3.0.5发布,该版本带来了文档改进、依赖性升级和重要的缺陷修复,比如,当嵌入式服务器未配置时,EmbeddedWebServerFactoryCustomizerAutoConfiguration类不应该被调用;@ConfigurationProperties注解不再用于可变的 Kotlin 数据类;使用@EntityScan注解导致 AOT 实例供应者出现代码生成错误。关于该版本的更多细节,请参阅发布说明。
与之类似,Spring Boot 2.7.10发布,该版本带来了文档改进、依赖性升级和重要的缺陷修复,比如,在使用 SnakeYAML 2.0 时,加载application.yml
文件会出现NoSuchMethodError异常;如果 classpath 包含“.
”字符,StandardConfigDataResource类的实例可能会导入同一个文件两次;在使用project.build.outputTimestamp
属性时,一个 Maven 插件使用了本地时区的时间戳。关于该版本的更多细节,请参阅发布说明。
Spring Boot 3.1.0 的第二个发布候选版本提供了一些新的特性,比如,SanitizableData类的新方法withSanitizedValue()
,它会返回一个脱敏(sanitized)值的新实例;支持 GraphQL 分页和排序的默认配置;支持 Spring Authorization Server。关于该版本的更多细节,请参阅发布说明。
Spring Framework 的 6.0.7 和 5.3.26 版本发布,主要解决上述的 CVE-2023-20860 和 CVE-2023-20861 漏洞。这两个版本还提供了新的特性,比如,在 SpEL 中改进了对matches
运算符和重复文本的诊断;更新了HandlerMappingIntrospector类;允许兼容 SnakeYaml 2.0 运行时。关于这两个版本的更多细节,请分别参阅6.0.7版本和5.3.26版本的发布说明。
Spring Framework 5.2.23 的发布也解决了 CVE-2023-20861 漏洞,并提供了与 Spring Framework 5.3.26 相同的新 SpEL 特性。关于这个版本的更多细节,请参阅发布说明。
Spring Data 的 2023.0-M1(代号为 Ullman)、2022.0.4 和 2021.2.10发布。这些服务版本包含了缺陷修复和文档改进,分别可用于 Spring Boot 3.0.5 和 2.7.10。里程碑版本中的新特性包括,新的滚动 API,支持偏移和基于 key 的分页;改进对 HQL 和 JPQL 的 JPA 查询解析;支持 MongoDB 的显式字段级加密;Spring Data REST中的聚合引用请求参数。关于该里程碑版本的更多细节,请参阅发布说明。
Spring Integration 的 6.1.0-M2、6.0.4 和 5.5.17 版本发布,带来了重要的变更,包括,LockRegistryLeaderInitiator类的改进,如在当前线程被中断的情况下,调用目标锁提供者将会被延迟;AbstractRemoteFileStreamingMessageSource类在远程调用方面的改进;修复与代码覆盖工具 Sonar 和 JaCoCo 的关系。关于这些版本的更多细节,请参阅6.1.0-M2、6.0.4和5.5.17的发布说明。
Spring Vault 的 3.0.2 和 2.3.3 版本发布,以解决上述的 CVE-2023-20859 漏洞,并带来了新的特性,如完善令牌撤销失败后的日志记录;在ClientHttpRequestFactoryFactory和ClientHttpConnectorFactory类中重用来自库的特定配置代码;在EnvironmentVaultConfiguration类中添加 AWS IAM Authentication 功能。关于这两个版本的更多细节,请参阅3.0.2 and 2.3.3的发布说明。
Spring for GraphQL 1.2.0 的第一个里程碑版本发布,提供了新的特性,包括,在@SchemaMapping注解标注的方法中支持分页返回值和分页请求;支持HandlerMethodArgumentResolver接口的自定义实例;依赖升级到GraphQL Java 20.0。关于该版本的更多细节,请参阅发布说明。
Spring for GraphQL 的 1.1.3 和 1.0.4 版本发布,其中包含了新的特性,WebGraphQlInterceptor接口中的访问请求属性和 cookie;ContextDataFetcherDecorator类的实例在名称变更时忽略订阅的修复。这些版本分别可用于 Spring Boot 3.0.5 和 2.7.10。关于这两个版本的更多细节,请参阅1.1.3和1.0.4的发布说明。
Spring Authorization Server 1.1.0 的第二个里程碑版本包含了缺陷修正、依赖性升级和新特性,如 RFC 8628,OAuth 2.0设备授权(Device Authorization Grant)的实现;为 OAuth2 客户端 secret 启用PasswordEncoder接口中定义的upgradeEncoding()
方法。关于该版本的更多细节,请参阅发布说明。
Spring HATEOAS 的 2.1-M1、2.0.3 和 1.5.4 版本发布。这些服务版本包括了文档改进和依赖性升级。里程碑版本包含如下特性,支持在表单上使用 JSR-303 定义的@Size注解的属性元数据;添加新的SlicedModel类,这是PagedModel类的简化版本,可以浏览切片,但不计算总数。关于这些版本的更多细节,请参阅2.1-M1、version 2.0.3和version 1.5.4的发布说明。
Spring Modulith 0.5.1 的发布提供了一个重要的缺陷修正,即spring-modulith-runtime
模块意外地包含了一个只用于测试的Logback配置文件。此外,还有一个依赖性升级到 Spring Boot 3.0.5。关于这个版本的更多细节,请参阅发布说明。
Spring Data JPA团队为开发者引入了HQL 和 JPQL 查询解析器,以便在 Spring Data JPA 应用程序中结合@Query
注解更容易地定制查询。
Quarkus
Quarkus 3.0.0 的第一个beta版本包含对管理接口的支持,该接口能够将选定的路由(即管理路由)暴露到不同的 HTTP 服务器上,避免在主 HTTP 服务器上暴露这些路由,之前的方式可能会导致对这些端点的泄漏和预料之外的访问。关于这个版本的更多细节,请参阅更新日志。
Quarkus 2.16.5.Final 是第五个维护版本,重要的变更包括,过滤掉执行测试类ProviderConfigInjectionWarningsTest时与 RESTEasy 相关的警告;修复加载工作区模块时的NullPointerException
;防止来自MessageBodyWriter的服务器端事件可能会写入一个不断累积的头信息中。关于这个版本的更多细节,请参阅更新日志。
Helidon
甲骨文发布了Helidon 3.2.0,其中的变更包括,对WriteableMultiPart类中定义的重载create()
方法的修复;对JtaConnection类中关闭数据库连接的错误行为的修复;对 SnakeYAML 2.0 的依赖升级。值得注意的是,在 SnakeYAML 2.0 中存在着破坏性的变更。如果直接使用 SnakeYAML,Helidon 应用程序可能会受到影响。然而,依然可以使用降级的 SnakeYAML 1.3.2 将应用程序升级到 Helidon 3.2.0。关于这个版本的更多细节,请参阅发布说明。
Open Liberty
IBM发布了Open Liberty 23.0.0.3-beta,支持 JDK 20、Jakarta EE 10 Platform 和 MicroProfile 6.0。
Micronaut
Micronaut 基金会提供了第一个里程碑版本的 Micronaut Framework 4.0.0,其特性包括,对Kotlin符号处理(Kotlin Symbol Processing)的实验性支持;对虚拟线程的支持;改进了缺失 Bean 的错误信息;对过滤器方法的支持。
Apache 软件基金会
正如 Apache Tomcat 团队所披露的,CVE-2023-28708,这是使用RemoteIpFilter类的一个安全漏洞,在通过 HTTP 接收到的、X-Forwarded-Proto 头信息设置为 HTTPS 的反向代理请求时,Tomcat 创建的会话 cookie 不包括secure
属性。这一漏洞可能导致攻击者通过不安全的通道传输会话 cookie。受此漏洞影响的 Tomcat 版本包括: 11.0.0-M1 至 11.0.0-M2、10.1.0-M1 至 10.1.5、9.0.0-M1 至 9.0.71 以及 8.5.0 至 8.5.85。
Camel Quarkus 3.0.0 的第一个里程碑版本,包含 Quarkus 3.0.0.Alpha5 和 Camel 4.0.0-M2,它是以 JDK 17 和 Jakarta EE 10 为基线的第一个 Camel Quarkus 版本。其他值得注意的变化包括,废弃了ReflectiveClassBuildItem类;修复了在用 Camel 4 和 Quarkus 3 测试时使用PerfRegressionIT类抛出的异常;将 Infinispan 测试拆分成分别由 Quarkus 和 Camel 管理的客户端独立模块。关于这个版本的更多细节,请参阅发布说明。
JBang
0.105.1和0.105.2版本的 JBang 带来了重要的变更,包括,改进的jbang edit
编辑命令,它假定支持的 JBang IDE插件之一已被安装;基于 modulepath 进行持续改进,以替换 classpath;jbang export jlink
命令现在是一个选项,允许开发人员导出一个嵌入 Java 运行时的 JBang 应用程序或脚本;对 Apple Silicon VSCodium下载的修正。
Failsafe
Failsafe是一个在 Java 8+环境中处理故障的轻量级、零依赖性的库,它发布了3.3.1版本,其特性是 API 的变更,比如,在 Failsafe JAR 中增加了完整的 Java 模块描述符;发布了 Failsafe 提供的CompletableFuture类实例内部的执行引用。有关该版本的更多细节,请参阅更新日志。
Maven
Maven 3.9.1发布,改善之处包括,改进了“missing dependency”的错误信息;使用 replace()方法替换 replaceAll()方法中的所有非正则表达式模式,或使用预编译模式来提高性能;废弃 Mojo 插件的参数表达式${localRepository}
,因为${localRepository}
注入的ArtifactFactory接口实例由于缺乏上下文,与 Maven 解析器接口LocalRepositoryManager不兼容。
Gradle
Gradle 8.1 的第一个候选版本发布,该版本提供了如下特性,配置缓存的持续改进,现在可以认为它业已稳定;Kotlin DSL的持续改进,这是 Groovy DSL 的替代方案,包括 Kotlin DSL 脚本中的实验性简单属性设置;对 JDK 20 的支持。关于这个版本的更多细节,请参阅发布说明。
原文链接:
Java News Roundup: JDK 20 Released, Spring Releases, Quarkus, Helidon, Micronaut, Open Liberty
相关阅读:
Java 近期新闻:新 JEP、GraalVM 23 早期访问构建、Infinispan、Mojarra、Micrometer Metrics
评论 1 条评论