在 26.0.0.9 中推出 MCP 服务器(mcp-1.0)、为 openidConnectClient 提供受保护资源元数据等更新
Open Liberty 26.0.0.9 引入了 MCP 服务器支持(mcp-1.0),为 openidConnectClient 新增了 OAuth 2.0 受保护资源元数据支持,并为共享 JCache 集群引入了自定义会话缓存名称前缀。
在 Open Liberty 26.0.0.9 中:
查看 26.0.0.9 中已修复 bug 的列表。
使用 26.0.0.9 开发和运行应用程序
如果您使用 Maven,请在 pom.xml 文件中包含以下内容:
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.12.3</version>
</plugin>
或者,如果您使用 Gradle,请在 build.gradle 文件中包含以下内容:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'io.openliberty.tools:liberty-gradle-plugin:4.0.2'
}
}
apply plugin: 'liberty'
或者,如果您使用 容器镜像:
FROM icr.io/appcafe/open-liberty
或者访问我们的 下载页面。
如果您使用 IntelliJ IDEA、Visual Studio Code 或 Eclipse IDE,还可以利用我们的开源 Liberty 开发工具,直接在 IDE 中高效完成开发、测试、调试和应用程序管理。
MCP 服务器(mcp-1.0)
模型上下文协议(Model Context Protocol,MCP) 是一项开放标准,使 AI 应用程序能够从外部来源访问实时数据和业务逻辑。借助 MCP 服务器功能(mcp-1.0),应用程序开发者只需使用少量注解,即可公开 Liberty 应用程序的工具和数据,供代理式 AI(agentic AI)工作流使用。
在 mcp-1.0 推出之前,尚无标准方法将 Liberty 应用程序中现有的 Java 业务逻辑公开给 AI 代理。您必须为每个要连接的 AI 工具构建并维护自定义集成。有了 mcp-1.0,您只需使用 @Tool 注解现有的 CDI 方法,Liberty 便会自动处理 MCP 协议、工具发现、会话管理、安全性和可观测性。无需更改业务逻辑,您的应用程序即可立即供任何兼容 MCP 的 AI 代理使用。
如需完整的入门指南和示例,请参阅 将 Liberty 业务逻辑公开为 AI 工具的博客文章 以及 mcp-1.0 功能文档。
26.0.0.9 中的新增内容
经过多个 beta 版本之后,mcp-1.0 现已正式发布(GA)。自上一个 beta 版本(26.0.0.9-beta)以来,最重要的变更是功能名称由 mcpServer-1.0 更改为 mcp-1.0,并且 server.xml 文件中的配置元素由 <mcpServer> 更改为 <mcp>。请按如下方式更新 server.xml 文件:
<featureManager>
<feature>mcp-1.0</feature>
</featureManager>
<application location="my-app.war">
<mcp path="/custom-mcp"/>
</application>
如果您是从 26.0.0.8-beta 或更早版本迁移,请注意核心 API 类型也已从 io.openliberty.mcp. 移至 org.mcpjava.server.。有关这些导入变更的完整详细信息,请参阅 26.0.0.9-beta 博客文章。
以下功能同样是本 GA 版本中的新增内容,未包含在 26.0.0.9-beta 中:
-
DNS 重绑定攻击防护 — 当 MCP 服务器收到来自环回地址的请求时,会按照 MCP 规范的要求验证
Origin头。无需任何配置。 -
工具方法支持
@MetaField— 可以使用@MetaField注解工具方法,向tools/list响应中的_meta对象添加数据。 -
@Tool支持outputSchemaFrom— 当structuredContent = true时,您可以指定另一个类来生成输出模式(output schema),而不受方法返回类型的限制。 -
针对不受支持注解的警告 — 如果应用程序使用了
mcp-1.0不支持的 MCP Java API 注解(例如@Prompt、@Resource、@ResourceTemplate),Liberty 现在会记录一条警告。应用程序仍会正常启动,使用@Tool注解的方法也会继续正常工作。 -
OAuth 2.0 受保护资源元数据(RFC 9720) — 当在
openidConnectClient上配置protectedResourceMetaDataEnabled="true"时,Liberty 会在/.well-known/oauth-protected-resource提供受保护资源元数据文档。这样,MCP 客户端便可按照 MCP 授权流程自动发现正确的授权服务器。
为 openidConnectClient 提供受保护资源元数据
OAuth 2.0 受保护资源元数据(RFC 9720)提供有关受 OAuth 2.0 保护的资源的元数据,其中包括指向可授予访问权限的授权服务器的链接。
在本次发布中,使用 openidConnectClient-1.0 功能的 Open Liberty 服务器可以启用受保护资源元数据。任何 openidConnectClient 配置均可启用受保护资源元数据,但其主要用例是与 mcp-1.0 功能配合使用,以支持 MCP 授权流程。在该流程中,MCP 客户端使用受保护资源元数据发现授权服务器。
要为 openidConnectClient 配置启用受保护资源元数据,请添加 <protectedResourceMetadata> 配置元素:
<openidConnectClient id="protected-resource-demo"
clientId="protected-resource"
clientSecret="..."
jwkEndpointUrl="https://auth.example.com/oidc/endpoint/SampleProvider/jwk"
tokenEndpointAuthMethod="basic"
issuerIdentifier="https://auth.example.com/oidc/endpoint/SampleProvider"
authFilterRef="mcpAuthFilter"
inboundPropagation="required">
<protectedResourceMetadata />
</openidConnectClient>
更多信息,请参阅 OpenID Connect Client 功能文档 以及 openidConnectClient 配置参考。
为共享 JCache 集群提供自定义会话缓存名称前缀
当您运行多个共享同一基于 JCache 的会话存储的 Liberty 实例时(例如,Kubernetes 或 OpenShift 上指向同一 Hazelcast 或 Infinispan 集群的多个 pod),Liberty 以前会在每个实例上生成相同的会话缓存名称。缓存名称相同意味着不同实例可能会在同一缓存上发生冲突,从而在共享缓存部署中带来会话数据损坏的风险。
Open Liberty 26.0.0.9 在 sessionCache-1.0 功能的 httpSessionCache 元素中新增了 cacheNamePrefix 属性。该属性面向运行由共享缓存集群支持的多实例 Liberty 部署的运维团队和管理员。当每个实例都需要独立的缓存命名空间以避免冲突时,可使用该属性。
以前,Liberty 始终将会话缓存名称生成为 com.ibm.ws.session.meta.XXX 或 com.ibm.ws.session.attr.XXX,无法区分这些缓存是由哪个 Liberty 服务器创建的。现在,您可以为每个 Liberty 服务器配置唯一的前缀。这样,单个共享集群便可安全地托管来自多个 Liberty 服务器的会话数据,而不会发生命名空间冲突。如果未配置前缀,则仍使用原有的缓存名称。
要配置缓存名称前缀,请在 httpSessionCache 配置中添加 cacheNamePrefix 属性:
<!-- Instance 1 -->
<httpSessionCache cacheRef="InfinispanCacheManager" cacheNamePrefix="pod1_"/>
<!-- Instance 2 -->
<httpSessionCache cacheRef="InfinispanCacheManager" cacheNamePrefix="pod2_"/>
通过前缀,每个实例都会获得不同的缓存名称:pod1_com.ibm.ws.session.attr.default_host/myapp 和 pod2_com.ibm.ws.session.attr.default_host/myapp。如果没有前缀,两个实例都会生成相同的缓存名称 com.ibm.ws.session.attr.default_host/myapp。cacheNamePrefix 属性尤其适用于以下场景:
-
多租户部署
-
需要独立缓存命名空间的蓝绿部署
-
需要按 pod 隔离缓存的 Kubernetes/OpenShift 部署
有关配置会话缓存的更多信息,请参阅 httpSessionCache 参考 文档。
本次发布中的安全漏洞(CVE)修复
| CVE | CVSS 分数 | 漏洞评估 | 受影响版本 | 说明 |
|---|---|---|---|---|
9.4 |
服务器端请求伪造 |
17.0.0.3-26.0.0.8 |
影响 |
|
7.5 |
拒绝服务 |
17.0.0.3-26.0.0.8 |
影响 |
|
8.7 |
HTTP 响应走私 |
17.0.0.3-26.0.0.8 |
影响 |
|
7.4 |
HTTP 请求走私 |
17.0.0.3-26.0.0.8 |
影响 |
|
8.7 |
HTTP 请求走私 |
17.0.0.3-26.0.0.8 |
影响 |
|
7.1 |
拒绝服务 |
17.0.0.3-26.0.0.8 |
影响 |
|
5.7 |
拒绝服务 |
17.0.0.3-26.0.0.8 |
影响 |
|
7.5 |
拒绝服务 |
17.0.0.3-26.0.0.8 |
影响 |
|
7.5 |
拒绝服务 |
17.0.0.3-26.0.0.8 |
影响 |
|
7.5 |
拒绝服务 |
17.0.0.3-26.0.0.8 |
影响 |
如需查看以往版本中的安全漏洞修复列表,请参阅 安全漏洞(CVE)列表。
本次发布中值得关注的 bug 修复
我们投入了一些时间修复 bug。以下部分仅介绍了本次发布中解决的部分问题。如果您感兴趣,可查看 26.0.0.9 中修复 bug 的完整列表。
-
IBM WebSphere Application Server Liberty 在使用 Liberty 集合体时受到权限提升漏洞的影响(CVE-2026-18499)
-
IBM WebSphere Application Server Liberty 受到拒绝服务漏洞的影响(CVE-2026-10571)
-
IBM WebSphere Application Server Liberty 受到多个拒绝服务漏洞的影响(CVE-2026-57819、CVE-2026-54225、CVE-2026-64958)
-
由于向 isUserInRole 传递了空主体,未经认证的 JAX-RS 请求在 z/OS 上触发 ICH408I SAF EJBROLE 查找
-
使用 mvn liberty:dev 部署时,Jakarta Security 4.0(appSecurity-6.0)HAM 处理失败
-
IBM WebSphere Application Server 受到多个漏洞的影响(CVE-2026-14980、CVE-2026-2482)
-
启用 restConnector-2.0 功能时,IBM WebSphere Application Server Liberty 受到拒绝服务漏洞的影响(CVE-2026-16192)
-
HTTP 传输忽略了针对 set.content.type.for.empty.request 的 Invocation.Builder.property() 设置
-
正常启动问题 - liberty-kafka 连接器:@Incoming 方法在应用程序启动完成前接收消息,导致通道永久失效
立即获取 Open Liberty 26.0.0.9
可通过 Maven、Gradle、Docker 以及可下载归档包 获取。