spring-addons高级定制:自定义OAuthentication与OpenidClaimSet,打造专属Authentication实现
spring-addons高级定制自定义OAuthentication与OpenidClaimSet打造专属Authentication实现【免费下载链接】spring-addonsAdditional Spring Boot auto-configuration for OAuth2 / OpenID REST项目地址: https://gitcode.com/gh_mirrors/sp/spring-addonsspring-addons 是一套为 Spring Boot 提供 OAuth2 / OpenID REST 自动配置的开源库它把 Spring Security 资源服务器与客户端中最繁琐的样板代码统统封装好让开发者专注于业务本身。而其中最具可玩性的能力之一就是你可以深度定制 OAuthentication 与 OpenidClaimSet把默认的认证对象改造成完全贴合自己业务模型的专属 Authentication 实现。本文面向新手和普通用户用最少的代码讲清楚这套定制机制的设计思路与实操路径。一、OAuthentication 与 OpenidClaimSet 是什么先看懂核心类设计在动手定制之前先花两分钟理解这两个核心类型的设计意图后面的路会顺畅很多。ClaimSet一切声明的基石ClaimSet.java 本质是一个扩展了MapString, Object的接口但比普通 Map 多了一组贴心方法getByJsonPath直接以 JSON Path 语法取深层嵌套的声明例如getByJsonPath(realm_access.roles)getAsString/getAsInstant/getAsStringSet/getAsUri/getAsBoolean把声明值安全地转换成目标类型避免手动判空和强转claim(name, value)链式写入或删除声明构造数据时非常顺手。它还有两个现成实现ModifiableClaimSet.java可变常用于组装测试数据与 UnmodifiableClaimSet.java不可变生产环境默认使用。OpenidClaimSet带用户名的声明集OpenidClaimSet.java 继承UnmodifiableClaimSet同时实现 Spring 的IdTokenClaimAccessor和Principal接口。它最大的亮点是引入usernameClaim概念构造时指定用哪个声明作为用户名来源默认是subgetName()会按 JSON Path 取用户名取不到时自动回退到sub相当稳健这意味着SecurityContext里的principal.getName()可以灵活映射到你想要的字段比如邮箱或自定义的preferred_username。OAuthenticationtoken 即 principalOAuthentication.java 是 spring-addons 对 Spring SecurityAbstractOAuth2TokenAuthenticationToken的泛型封装public class OAuthenticationT extends MapString, Object Serializable Principal OAuth2Token extends AbstractOAuth2TokenAuthenticationTokenT implements OAuth2AuthenticatedPrincipal它的设计哲学非常鲜明token 本身就是 principal。getPrincipal()、getAttributes()、getClaims()全部返回同一个泛型 token 对象同时它还是不可变的——setDetails与setAuthenticated直接抛异常防止认证状态被意外篡改安全细节到位。二、如何自定义 OpenidClaimSet继承并扩展专属声明集理解了基座之后定制就从这里开始。当你需要给声明集补充领域方法而不是到处写魔法字符串取 Map 值时就该自定义 ClaimSet 了。第一步定义自己的 ClaimSet 类型比如你希望把用户拥有的代理账户信息暴露成类型安全的方法public class ProxiesClaimSet extends OpenidClaimSet { public ProxiesClaimSet(MapString, Object claims, String usernameClaim) { super(claims, usernameClaim); } public ListProxy getProxies() { return getByJsonPath(proxies); } public Proxy getProxyFor(String username) { ... } }第二步让 Token 持有 ClaimSetOpenidToken.java 展示了如何把 ClaimSet 升级为OAuth2Token——只需再实现getTokenValue()、getExpiresAt()、getIssuedAt()三个方法。你完全可以照着同样的思路让自己的 ClaimSet 子类也实现OAuth2Token从而满足OAuthentication泛型约束中的全部条件。三、如何编写自定义 OAuthentication实战步骤现在进入核心环节。官方在 samples/tutorials/resource-server_with_specialized_oauthentication/ 目录下提供了一个完整的专属 Authentication示例我们按步骤拆解。步骤 1定义专属 Token参考示例中的 ProxiesToken.java继承你自定义的 ClaimSet或直接继承OpenidToken实现OAuth2Token接口让它同时具备声明集 令牌双重身份。步骤 2定义专属 Authentication参考 ProxiesAuthentication.javapublic class ProxiesAuthentication extends OAuthenticationProxiesToken { public ProxiesAuthentication(ProxiesToken token, Collection? extends GrantedAuthority authorities) { super(token, authorities); } public boolean hasName(String username) { return Objects.equals(getName(), username); } public Proxy getProxyFor(String username) { return getAttributes().getProxyFor(username); } }只需要继承并传入泛型参数然后添加业务方法一个专属 Authentication 就诞生了。是不是很简单步骤 3在 Controller 里直接使用得益于上面的封装Controller 的方法签名可以写得非常优雅GetMapping(/greet) public String greet(OAuthenticationProxiesToken auth) { return Hi auth.getName() , proxies: auth.getAttributes().getProxies(); }Spring MVC 会自动把认证对象注入方法参数你再也不用在代码里Authentication authentication然后做一堆强转了。完整的接线可以看示例中的 SecurityConfig.java 与 GreetingController.java。四、自定义 Authentication 的测试与最佳实践如何为自定义 Authentication 编写测试spring-addons 提供了配套的测试库spring-addons-starter-oidc-test其中包含 OAuthenticationTestingBuilder.java 等工具可以轻松构造带自定义 token 的认证对象配合WithMockAuthentication之类的注解见 annotations 目录几行代码就能把OAuthenticationProxiesToken塞进 SecurityContext免去每次手动 mock 的繁琐。四条实用建议只在确有业务方法时定制如果只是取个别声明直接用getClaims().getAsString(xxx)就够了不要过度设计保持不可变性沿用OAuthentication的设计你的子类也应保证 token 不可变避免认证状态漂移类型安全优先把 JSON Path、角色集合这类魔法值收进 ClaimSet 的方法里让 Controller 层只见领域语义善用 usernameClaim多租户或多身份源场景下灵活配置用户名声明能让日志审计和权限判断都更准确。五、总结通过自定义OAuthentication 与 OpenidClaimSetspring-addons 让你以极低的成本打造出贴合业务的专属 Authentication 实现ClaimSet提供类型安全的声明访问OpenidToken让声明集化身令牌而泛型的OAuthentication则把所有能力优雅地聚合在一起。无论是AuthenticationPrincipal注入、方法级安全见 SpringAddonsMethodSecurityExpressionRoot.java还是单元测试这套机制都能让你从样板代码中彻底解放。想亲手实验克隆仓库即可git clone https://gitcode.com/gh_mirrors/sp/spring-addons然后跑起samples/tutorials下的示例项目马上就能体会到高级定制的乐趣。【免费下载链接】spring-addonsAdditional Spring Boot auto-configuration for OAuth2 / OpenID REST项目地址: https://gitcode.com/gh_mirrors/sp/spring-addons创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

发布任务的重试边界

发布任务的重试边界

发布任务的重试边界 在去中心化 AI(Decentralized AI, DeAI)与 Web3 DApp 的结合项目中,不少实现仍停留在演示原型阶段。 Demo 的代码逻辑通常很直白:前端连接 MetaMask 钱包获取用户签名,后端用 Python 写个简单的 Fa…

2026/8/24 5:35:05 阅读更多 →
混合高斯模型(GMM)原理与实战:从EM算法到Python实现

混合高斯模型(GMM)原理与实战:从EM算法到Python实现

1. 从“一团乱麻”到“泾渭分明”:GMM的直觉与价值如果你手头有一堆数据点,它们看起来混杂在一起,像是一团散落在纸上的芝麻,你很难一眼看出它们究竟属于几个不同的群体。比如,你有一批客户的消费记录,里面…

2026/8/24 17:22:05 阅读更多 →
MASTG-Hacking-Playground 修复指南:对照 MASTG 最佳实践给漏洞 App 打补丁的 12 个要点

MASTG-Hacking-Playground 修复指南:对照 MASTG 最佳实践给漏洞 App 打补丁的 12 个要点

MASTG-Hacking-Playground 修复指南:对照 MASTG 最佳实践给漏洞 App 打补丁的 12 个要点 【免费下载链接】MASTG-Hacking-Playground 项目地址: https://gitcode.com/gh_mirrors/ma/MASTG-Hacking-Playground MASTG-Hacking-Playground 是 OWASP MAS 项目下…

2026/8/23 14:26:56 阅读更多 →

最新新闻

从网页到PDF:高质量打印件生成全攻略与工具实践

从网页到PDF:高质量打印件生成全攻略与工具实践

1. 项目概述:从“网页打印件”到高效信息留存每次在网上冲浪,看到一篇干货满满的文章、一个设计精良的教程,或者一份重要的在线文档,你是不是都有一种冲动——把它“保存”下来?收藏夹固然方便,但总感觉不够…

2026/8/26 9:06:51 阅读更多 →
ESP32+HB100多普勒雷达测速系统:从原理到实战

ESP32+HB100多普勒雷达测速系统:从原理到实战

雷达测速这活儿,听着挺硬核,其实动手做起来比想象中接地气。我前后折腾了大半个月,从只知道“雷达测速是警察用的”到能自己搭一套实时监测路上车辆速度的小系统,中间踩了不少坑,也把原本模糊的原理彻底搞透了。这篇就…

2026/8/26 9:06:51 阅读更多 →
深入解析Cortex-M3调试系统:从硬件断点到性能追踪的实战指南

深入解析Cortex-M3调试系统:从硬件断点到性能追踪的实战指南

1. 项目概述:深入Cortex-M3调试系统如果你正在用STM32或者类似的Cortex-M3内核芯片做开发,大概率遇到过这样的场景:程序跑飞了,停在某个奇怪的地方,单步执行时变量值莫名其妙地变化,或者更糟,直…

2026/8/26 9:06:51 阅读更多 →
深入解析Xilinx 7A50T FPGA引脚功能:从电源架构到配置实战

深入解析Xilinx 7A50T FPGA引脚功能:从电源架构到配置实战

1. 项目概述:为什么需要深入理解7A50T的引脚?在硬件设计领域,尤其是FPGA(现场可编程门阵列)的应用中,芯片的引脚定义图(Pinout)和功能详解,其重要性不亚于建筑师手中的施…

2026/8/26 9:06:51 阅读更多 →
全开源H5十四合一代付系统源码解析与二次开发部署教程

全开源H5十四合一代付系统源码解析与二次开发部署教程

简介:代付系统作为平台批量打款的核心中间件,是电商结算、佣金发放、供应链付款等场景不可或缺的技术基础设施。它通过统一封装多个支付通道的接口抽象,解决异构上游协议差异,并借助订单状态机保障资金流转可靠性。一套全开源、可…

2026/8/26 9:06:51 阅读更多 →
AI驱动网络钓鱼攻击的防御策略:从技术原理到实战指南

AI驱动网络钓鱼攻击的防御策略:从技术原理到实战指南

1. 项目概述:当钓鱼攻击披上AI的“新衣” 最近几年,网络安全圈里一个老生常谈的话题——“网络钓鱼”,正在经历一场静默但深刻的“工业革命”。过去,我们识别钓鱼邮件,很大程度上依赖于一些“粗糙”的痕迹:…

2026/8/26 9:05:47 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →