首页 / 标签TAG / SPRINGFORALL

# spring-boot

围绕 spring-boot 的技术文章与经验分享。

共 90 篇文章

Spring Boot 4.1 接 NullAway 的 JSpecify 模式,漏报的空指针全在 JDK 和 Jackson 上

在 Spring Boot 4.1.1 项目里写了 17 处不判空的调用,接上 Error Prone 2.50.0 和 NullAway 0.14.2 实测:JSpecify 模式报 12 个错误,Spring API 上直接标 @Nullable 的返回值全部拦下;List.get、System.getProperty、HashMap.put 和 RowMapper 里的 ResultSet.getString 要加 JSpecifyExperimental 才报,Jackson 的 JsonNode.get 始终漏网。JDK 21 上要配 .mvn/jvm.config 和 -XDaddTypeAnnotationsToSymbol=true,编译耗时中位数从 2248 ms 到 4139 ms。

Jackson 2.x 泛型类型 id 能绕过白名单,Spring Boot 3.5 得手动升到 2.21.8

Jackson 10 月 17 日发布 2.22.4、2.21.8、2.18.12,修复 databind、Avro、CBOR、Protobuf、Smile 的多个 CVE,其中 CVE-2026-110879 让泛型类型 id 里的类型参数也要过 PolymorphicTypeValidator。在 Spring Boot 3.5.16 中实测:2.21.4 和 2.21.7 会实例化白名单外的类,2.21.8 返回 400 并在日志里点名拒绝。

Starship 1.27 修了两个提示符安全洞,旧版碰上指向 /dev/zero 的软链会吃掉 3.5G 内存

Starship 1.27.0(北京时间 10 月 17 日)修了 GHSA-x486(版本元数据符号链接可拖垮提示符)和 GHSA-679r(降信任仓库仍走 git 可执行文件),并把 package 模块补上 build.gradle.kts。对照 1.26.0/1.27.0 官方 musl 包,在最小 Spring Boot 4.1.1 Gradle Kotlin DSL 项目上复现了安全问题与版本号显示差异。

Claude Code 团队按风险决定一个 PR 要几个人批,我用 Spring Boot 把这套规则写成了 CI 关卡

Claude Code 团队按风险决定人工批准人数:低风险 0 人、中风险 1 人、高风险 2 人,机器人批准不算人,批准只对具体提交有效,审查三轮封顶。我用 Spring Boot 4.1.1 把这些规则写成读真实 git 数据的 CI 关卡,风险判定改用路径规则,并在 5 个样例分支上实测。

JDK 27 发布前差点带上一个改坏字符串的 C2 bug,我把旧 EA 版本找回来复现了一遍

JDK 27 GA 前不到一个月,C2 的 EncodeISOArray intrinsic 被发现会把字符串前 4 个字节写坏(JDK-8390546,P1),最后在 GA 构建 27+35 里回退修掉。用 Spring Boot 实测 27-ea+23/24/34、27 GA 和 28-ea+20:ea+24 和 ea+34 稳定复现,关掉压缩对象头就消失。还钉着 27 EA 镜像的该换了。

Spring Security 的通行密钥默认存在内存里,应用一重启就得重新注册:7.1 上换 JDBC 实测

Spring Security 从 6.4 引入通行密钥起就默认把凭证存在内存里,重启后同一把密钥登录返回 401。在 Boot 4.1.1(Security 7.1.1)上用 Chrome 虚拟认证器实测:换成两个 JDBC 仓库后重启照常登录,官方建表脚本第二次启动会报表已存在;和密码组成 MFA 时要用 7.1 的 WEBAUTHN_REGISTERED 条件,否则没注册过的用户进不了注册页。

ADK Java 1.12.0 先放出了工作流图,现在只能跑单个节点,整张图还跑不起来

Google ADK Java 1.12.0 新增实验性的 Workflow、Node、Edge、Route、JoinNode 等工作流类型,BaseAgent 改为继承 BaseNode。单个节点可以直接运行,但 Workflow.runNode 目前返回 UnsupportedOperationException,整张图还不能跑。同版还新增了禁止 Agent 配置声明本地 stdio MCP 服务器的开关。