本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
这个月是 Spring 生态的密集发布月,光是 Spring AI 都发布了好几个版本了。
这不,上周五,Spring AI 团队就连发 3 个版本,分别是 1.1.7、1.0.8(维护线)、2.0.0-M7。由于当前的主流版本是 1.1.x 版本,因此,接下来本文就带领大家一起来看看这次的 Spring AI 1.1.7 有哪些变化。
版本概览
由于 Spring AI 2.x 正式版将于本月推出,因此其它的两个 1.x 主线和维护线版本几乎不再增加新功能了,以稳定性、bug 修复、漏洞修复为主。
2026 年 5 月 23 日,Spring AI 团队正式发布了 1.1.7 版本,与 1.0.8(维护线)和 2.0.0-M7(里程碑线)同步推出。这次发布并非功能大爆炸,而是一次以稳定性、安全性和兼容性为核心的精准维护更新。对于正在生产环境使用 Spring AI 1.1.x 的开发者来说,这是一次强烈建议立即升级的版本。
与 2.0.0-M7 的“颠覆式创新”不同(如废弃 SSE 传输协议、ToolCallAdvisor 成为默认工具调用方式等),1.1.7 的定位非常明确,修复关键 Bug、堵住安全漏洞、解决兼容性痛点。这也相当于告诉社区,1.x 稳定线依然在积极维护,生产环境可以放心依赖。
文章配图参见 https://mp.weixin.qq.com/s/MBp8QenN4v8_juSdlB0gMQ。
三大核心更新详解
修复 CVE-2026-41863
这是本次升级的最重要理由,没有之一。因为 CVE-2026-41863 是一个高危漏洞。
漏洞背景
Spring AI 在支持 Anthropic 的 Skills API(智能体技能 API)时,存在一个路径遍历(Path Traversal)漏洞。当使用 Anthropic 模型生成文档(如 DOCX、PDF、PPTX、XLSX)时,模型返回的文件名会被直接用于 Path.resolve() 操作,未经过任何净化处理。
攻击原理
由于文件名由 LLM 生成,攻击者可以通过构造特定的 Prompt,诱导模型返回包含路径遍历序列的文件名。已有网友通过 prompt 的形式获得类型下方这样的文件信息。
../../../etc/passwd
../../../.ssh/authorized_keys
这个漏洞导致,Spring AI 会将这些文件写入到预期目录之外。从而引起下面这些问题。
- 敏感文件被覆盖(如系统配置、SSH 密钥)
- 恶意文件被植入(如 Web Shell、启动脚本)
- 权限提升(写入受限目录)
这是一个典型的 Agent SkillSlip 类漏洞,与近期在 Gemini CLI、Claude Code 等 AI 工具中发现的路径遍历问题属于同一攻击面。
影响范围与修复
根据官网的信息可知,这个漏洞影响范围与修复情况,如下所示。
- 影响版本:Spring AI 1.1.0 到 1.1.6 之间的所有版本
- 修复版本:1.1.7(1.0.x 不受此漏洞影响,因为 Skills API 是 1.1.x 引入的功能)
- CVSS 评分:Medium(AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N),攻击复杂度低,但需认证权限
- 修复方式:对 LLM 返回的文件名进行严格的输入验证和路径净化,确保解析后的路径始终位于目标目录内
官方建议,如果你的应用使用了 spring-ai-starter-model-anthropic 并启用了 Skills 功能,请立即升级至 1.1.7,并审计过去生成的文件记录。
新特性
新特性方面,Ollama 正式支持 GraalVM 原生镜像。
这对于追求极致启动速度和内存占用的云原生开发者来说,是一个期待已久的修复。
问题现象
在 1.1.7 之前,使用 Spring AI 集成 Ollama 的开发者如果尝试构建 GraalVM Native Image,会遇到运行时反射相关的错误。根本原因在于 Ollama 模块中的 ThinkOption 序列化/反序列化类(ThinkOptionDeserializer 和 ThinkOptionSerializer)未被注册到 GraalVM 的反射配置中。
技术细节
GraalVM Native Image 在构建时会进行封闭式世界分析(Closed-World Analysis),所有需要反射访问的类必须显式声明。有社区开发者发现,需要手动注册以下类型才能 workaround。
// 1.1.6 及之前版本需要手动添加的 workaround
for (var c : new Class[]{
ThinkOption.ThinkOptionDeserializer.class,
ThinkOption.ThinkOptionSerializer.class
}) {
hints.reflection().registerType(c, MemberCategory.values());
}
在 1.1.7 中,Spring AI 团队内置了这些 RuntimeHints,开发者无需再手动配置即可直接构建 Ollama + GraalVM 的原生镜像。
实际收益
从官方给出的数据可知。
- 启动时间:从 JVM 模式的数秒降至原生镜像的毫秒级
- 内存占用:典型场景下内存减少 50% 以上
- 云原生适配:完美适配 AWS Lambda、Azure Functions、Knative 等 Serverless 场景
- 边缘部署:更适合资源受限的 IoT 和边缘计算环境
修复 OpenAI 流式传输丢数据问题
这是一个隐蔽但影响深远的 Reactive Streams 行为问题,可能导致 AI 应用的输出内容不完整或顺序错乱。
原先,OpenAiChatModel 在流式响应(Streaming)处理中,内部使用了 switchMap 操作符。当开发者在业务层对流进行缓冲处理(如 buffer(2))后接 concatMap 时,会出现数据块丢失的现象。
而 switchMap 的核心特性是,当新的上游事件到达时,自动取消(cancel)之前的内部流订阅。这在“搜索建议”等场景下是理想行为,但在流式聊天场景中却是灾难。
Token 1 arrives → switchMap starts processing
Token 2 arrives (50ms later) → switchMap CANCELS Token 1's processing
Token 3 arrives → switchMap CANCELS Token 2's processing
...
当业务层使用 buffer(2).concatMap(...) 进行批量安全校验或日志记录时,由于 switchMap 的取消机制,导致部分 Token 在传递到下游之前就被丢弃了。
修复方案
Spring AI 团队将内部的 switchMap 替换为更适合流式场景的运算符(如 concatMap 或 flatMapSequential),从而确保以下几个方面的问题得到修复。
- 所有 Token 按序处理,不丢失任何数据块
- 与下游的
buffer+concatMap模式兼容 - 保持背压(Backpressure)安全
因此,如果你的应用有以下特征,官方也强烈建议验证并升级。
- 使用
OpenAiChatModel.stream()进行流式输出 - 对流进行了
buffer()、window()或groupBy()等分批操作 - 在
concatMap中执行了异步校验、日志记录或副作用操作 - 发现 AI 返回的内容偶尔“缺字少句”或逻辑不连贯
其他修复与改进
RedisVectorStore 删除操作截断问题
在 1.1.7 中修复了 RedisVectorStore#doDelete 的一个隐蔽 Bug,批量删除时仅删除前 10 条消息。这个问题在 1.0.8 中同样存在并已修复。
该 bug 的影响是,如果你使用 Redis 作为向量存储,并且需要批量删除大量文档,之前的版本可能导致“假删除”,看起来执行了删除,实际上大部分数据仍在 Redis 中。
这会造成:
- 向量存储空间持续增长
- 检索结果包含已标记删除的“幽灵文档”
- RAG(检索增强生成)的上下文污染
1.1.7 vs 2.0.0-M7
Spring AI 目前并行维护三个版本线,1.1.7 的发布体现了团队对稳定线的承诺。
| 维度 | 1.0.8(维护线) | 1.1.7(稳定线) | 2.0.0-M7(里程碑线) |
|---|---|---|---|
| 定位 | 长期支持,仅修复 | 功能稳定,修复 + 小特性 | 快速迭代,可能引入 Breaking Changes |
| Spring Boot | 3.2.x | 3.3.x / 3.4.x | 4.0.x |
| 新特性 | 无 | Ollama + GraalVM | ToolSpec API、MCP HTTP 传输 |
| 安全修复 | 无 | CVE-2026-41863 | CVE-2026-41863 |
| Breaking Changes | 无 | 无 | 有(SSE 废弃、PromptChatMemoryAdvisor 移除等) |
| 生产建议 | 遗留系统维持 | 推荐用于生产 | 仅评估,不建议生产 |
升级指南
升级指南方面,和以往类似。先进行 Maven 依赖更新。
<!-- 更新前 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.1.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 更新后 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.1.7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
然后再进行升级检查清单,包括以下几个方面。
- 安全审计:如果使用了 Anthropic Skills API,检查历史文件生成记录
- 流式功能测试:验证
OpenAiChatModel.stream()在业务缓冲逻辑下的完整性 - Ollama + GraalVM 测试:移除之前的手动
RuntimeHintsRegistrar,验证原生镜像构建 - Redis 向量存储:执行批量删除测试,验证是否全部生效
- 回归测试:运行核心对话流程,确认无行为退化
目前,从社区讨论来看,1.1.7 的发布获得了不少老外的积极反馈。我摘录了点赞比较高的 3 条评论,如下所示。
- 终于等到 Ollama 的 GraalVM 支持,这是 GitHub Issues 上被反复提及的需求,本地部署 Ollama 的开发者现在可以真正享受原生镜像的启动速度优势。
- 流式丢数据的问题困扰了我们两周,有开发者表示,在复杂的 Reactive 管道中,这个
switchMap问题极难定位,1.1.7 的修复解决了他们的燃眉之急。 - 安全修复很及时,随着 AI Agent 攻击面的扩大,Skills API 的路径遍历问题提醒开发者,LLM 的输出不可信任,必须像对待用户输入一样进行严格的输入验证。
总结
Spring AI 1.1.7 是一次小而精的维护发布,它修复了三个不同维度的重要问题。
| 问题类型 | 具体内容 | 紧急程度 |
|---|---|---|
| 安全 | CVE-2026-41863 路径遍历漏洞 | 立即升级 |
| 兼容性 | Ollama 支持 GraalVM 原生镜像 | 强烈建议 |
| 稳定性 | OpenAI 流式传输丢数据 | 强烈建议 |
| 数据一致性 | RedisVectorStore 批量删除截断 | 建议升级 |
总的来说,Spring AI 现在迭代比较快,如果有漏洞则强烈建议升级;如果有你们遇到的 bug,则也建议升级;如果你们还没有 AI 落地,建议把 loading 换成 thinking …

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!