编辑
2026-10-25
学习记录
00

SSO 实战系列(3/3):这一篇把 Spring Boot 接 MaxKey 的每个配置项落到具体值上。

和 Keycloak 那篇最大的不同:MaxKey 的发现文档不能直接喂给 Spring 的 issuer-uri,角色也不在 Token 里。这两点如果不提前处理,登录会在很靠后的位置失败。

上篇《Spring Boot 3 接入 Keycloak 实战》讲的是标准 OIDC 的最佳路径。这一篇讲 MaxKey 4.2.0 在同样场景下的实际接法,包括它和标准实现不完全一致的地方。

示例环境:Spring Boot 3.5.x、Spring Security 6.5.x、MaxKey 4.2.0、Java 21、Maven。

编辑
2026-10-25
学习记录
00

本文对比四个免费候选:两个产品型 IdP(Keycloak、MaxKey),两个框架型方案(Sa-Token、Spring Authorization Server)。四个都是 Apache 2.0,都能私有化,但“装完能用”的程度和 License 之外的成本完全不同。

你的项目是 Spring Boot,这一点决定了判断方式:产品型 IdP 只要支持标准 OIDC,Spring 侧接法基本一致;框架型方案则要自己补认证服务和用户体系。所以先看运维成本和开发量,再看许可证。

版本信息查证于 2026-10-25:Keycloak 26.8.1(2026-10-13)、MaxKey 4.2.0(2026-10-21)、Sa-Token 1.46.0(2026-08-19)、Spring Authorization Server 1.5.8(2026-06-09,独立版最后一个版本,后续并入 Spring Security 7)。上线前请以官方页面为准。

编辑
2026-10-25
项目分享
00

该文章已加密,点击 阅读全文 并输入密码后方可查看。

编辑
2026-10-25
学习记录
00

语言篇讲语法,运行时篇讲 JVM;这一篇讲工程落地。

Spring 项目的升级难点,通常不在 JDK 21 本身,而在两件事:Spring Boot 2.x → 3.x 的命名空间迁移,以及虚拟线程到底值不值得开、开了为什么可能没效果。

TL;DR

  • JDK 17 是 Spring Boot 3 的门票;虚拟线程要 Boot 3.2+。
  • 推荐路径:8 → 17(Boot 2.7 验证)→ Boot 3.x → 21,不要把 JDK 和框架放在同一个 PR 里升。
  • 最大的机械改动是 javax.* → jakarta.*;最大的认知改动是虚拟线程的适用边界。
  • 虚拟线程只提升 I/O 密集场景的并发承载;瓶颈会转移到连接池、下游和 CPU。

编辑
2026-10-25
学习记录
00

同一段代码,从 JDK 8 换到 JDK 21,语法一个字没改,行为却可能变:启动时多了一个 InaccessibleObjectException,日志里的中文突然乱码,老 GC 参数不生效,某个脚本引擎找不到实现。

语言篇讲的是“怎么写”,这篇讲“跑起来之后会发生什么”。升级真正让人加班的部分,大多在这里。

TL;DR

  • JPMS 对 Spring 应用的真实影响是强封装,不是逼你写 module-info.java。
  • G1 已是默认;ZGC 适合大堆低延迟,但要压测后再换;容器里优先用 MaxRAMPercentage。
  • JDK 18 起 file.encoding 默认 UTF-8,这是中文项目最容易被忽略的隐性变更。
  • Java EE/CORBA、CMS、Nashorn 已被移除;CDS 和 JFR 是升级顺带的收益。