27.9K Star 一个轻量级 Java 权限认证框架
嗨,艾瑞巴蒂,我是硕宇精选,致力于发现、汇总和分享优秀的开源项目,欢迎大家关注和咨询。今天小编为大家介绍一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。接下来小编为您详细介绍这款高星项目。
功能模块:
目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。
功能结构图:
功能说明:
本项目旨在以简单、优雅的方式完成系统的权限认证部分,以登录认证为例,你只需要:
// 会话登录,参数填登录人的账号id
StpUtil.login(10001);
无需实现任何接口,无需创建任何配置文件,只需要这一句静态代码的调用,便可以完成会话登录认证。
如果一个接口需要登录后才能访问,我们只需调用以下代码:
// 校验当前客户端是否已经登录,如果未登录则抛出 `NotLoginException` 异常
StpUtil.checkLogin();
大多数功能都可以一行代码解决:
踢人下线:
// 将账号id为 10077 的会话踢下线
StpUtil.kickout(10077);
权限认证:
// 注解鉴权:只有具备 `user:add` 权限的会话才可以进入方法
@SaCheckPermission("user:add")
public String insert(SysUser user) {
// ...
return "用户增加";
}
路由拦截鉴权:
// 根据路由划分模块,不同模块不同鉴权
registry.addInterceptor(new SaInterceptor(handler -> {
SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
// 更多模块...
})).addPathPatterns("/**");
单点登录:
由简入难划分为三种模式,解决不同架构下的 SSO 接入问题:
系统架构 | 采用模式 | 简介 | 文档链接 |
前端同域 + 后端同 Redis | 模式一 | 共享Cookie同步会话 | 文档、示例 |
前端不同域 + 后端同 Redis | 模式二 | URL重定向传播会话 | 文档、示例 |
前端不同域 + 后端 不同Redis | 模式三 | Http请求获取会话 | 文档、示例 |
授权认证:
分为四种授权模式,解决不同场景下的授权需求
授权模式 | 简介 |
授权码(Authorization Code) | OAuth2.0 标准授权步骤,Server 端向 Client 端下放 Code 码,Client 端再用 Code 码换取授权 Token |
隐藏式(Implicit) | 无法使用授权码模式时的备用选择,Server 端使用 URL 重定向方式直接将 Token 下放到 Client 端页面 |
密码式(Password) | Client直接拿着用户的账号密码换取授权 Token |
客户端凭证(Client Credentials) | Server 端针对 Client 级别的 Token,代表应用自身的资源授权 |
源码地址:
https://gitee.com/dromara/sa-token