Dromara Sureness:把 REST API 鉴权这事做薄做快
文章目录
- Dromara Sureness:把 REST API 鉴权这事做薄做快
- 1、 解决什么问题
- 2、 性能数据
- 3、 和老牌框架比一比
- 4、 怎么接入
- 5、 框架适配样例
- 6、 谁适合用
Dromara Sureness:把 REST API 鉴权这事做薄做快
sureness 在 GitHub 上拿到 877 Star 了。
Dromara 开源了这个安全框架,只干一件事:保护 REST API。认证、鉴权、RBAC,塞进一个不挑框架的内核里,Spring Boot、Quarkus、Javalin、Ktor、Micronaut 都能接。
1、 解决什么问题
后端做接口鉴权,绕不开两个老选手:Shiro 和 Spring Security。Shiro 学起来轻,但 REST 和 WebSocket 得自己改造;Spring Security 功能全,但是和学习曲线一样陡,配置一不留意就锁死在 Spring 体系。
sureness 想填的空位很明确:REST 优先、框架无关、性能不拉、上手简单。它把请求 URI 加上 HTTP 方法当资源,比如/api/v2/book===get,再按 RBAC 把角色挂到资源上。匹配走的是字典匹配树,不是常见的 ant match。
2、 性能数据
仓库里给了一份 benchmark,三款框架对比无框架裸跑的耗时:
- 无框架:0ms 基线
- sureness:损失 0.026ms
- Shiro:损失 0.088ms
- Spring Security:损失 0.116ms
换成 TPS 数字,sureness 是 Shiro 的 3 倍、Spring Security 的 4 倍。API 匹配链加长后差距还会扩大。原因主要在那棵字典匹配树,路径和角色的查找复杂度不跟着路由数线性涨。
3、 和老牌框架比一比
仓库里直接放了一张对比表,挑几条关键的:
| 能力 | sureness | Shiro | Spring Security |
|---|---|---|---|
| 多框架支持 | 原生支持 | 需改造 | 不支持 |
| WebSocket | 支持 | 不支持 | 不支持 |
| JAX-RS | 支持 | 不支持 | 不支持 |
| 路径匹配 | 字典匹配树 | ant match | ant match |
| 动态权限 | 支持 | 需改造 | 需改造 |
| 学习曲线 | 简单 | 简单 | 陡 |
WebSocket 和 JAX-RS 这两块是 sureness 显得特别的地方。Shiro 和 Spring Security 在这两个容器上要么不支持要么绕弯,sureness 是 Servlet 和 JAX-RS 两边都吃。
4、 怎么接入
Maven 工程加坐标:
<dependency><groupId>com.usthe.sureness</groupId><artifactId>sureness-core</artifactId><version>1.1.0</version></dependency>Gradle 写法:
compile group: 'com.usthe.sureness', name: 'sureness-core', version: '1.1.0'默认配置DefaultSurenessConfig走sureness.yml当数据源,JWT、Basic、Digest 三种认证开箱可用:
@BeanpublicDefaultSurenessConfigsurenessConfig(){returnnewDefaultSurenessConfig();}账号和权限数据可以从文本、关系库、非关系库、注解里来。框架提供两个接口:SurenessAccountProvider喂账号,PathTreeProvider喂资源角色映射。想从数据库读就实现这两个接口,余下交给内核。
拦截器拿到请求后调一行做认证:
SubjectSumsubject=SurenessSecurityManager.getInstance().checkIn(servletRequest);成功返回SubjectSum,失败抛异常。异常分得很细:账号禁用、凭证过期、权限不足各有对应类型,业务侧 catch 后自己决定返回什么响应。
5、 框架适配样例
仓库里给了一长串集成样例,几乎覆盖主流后端框架:
- Spring Boot 配置文件方案 sample-bootstrap
- Spring Boot 数据库方案 sample-tom
- Quarkus、Javalin、Ktor、Micronaut、Solon、JFinal
- Spring Gateway、Zuul 网关
- Session 方案和 Redis Session 缓存方案
样例代码量不大,拿来对照自己的工程结构最直观。
6、 谁适合用
在做微服务网关、需要统一鉴权层的团队。Spring Cloud Gateway 和 Zuul 都有现成样例,迁移成本主要是把账号数据灌进去。
被 Shiro 或 Spring Security 的复杂度卡住、想换一套 REST 优先方案的开发者。学习曲线那一栏标的是简单,文档和 demo 也跟得上。
需要支持 WebSocket 或 JAX-RS 容器的项目。这两块老框架不打算补,sureness 是少数能直接给出方案的选项。
更进一步定制可以走扩展点:自定义 Subject、自定义 SubjectCreator、自定义 Processor、自定义数据源。内核是 Apache 2.0 协议,商用没有负担。
877 Star 不算炸,但 dromara 旗下还挂着 HertzBeat、MaxKey 这些项目,整体是在企业运维和身份权限这条线上做深耕的开发者社区。如果接口鉴权是当前的瓶颈点,sureness 值得拿来试一把。
r 不算炸,但 dromara 旗下还挂着 HertzBeat、MaxKey 这些项目,整体是在企业运维和身份权限这条线上做深耕的开发者社区。如果接口鉴权是当前的瓶颈点,sureness 值得拿来试一把。