身份认证和权限鉴别,是大多数系统后台都需要实现的逻辑。从简单的小型网站的用户登录,到极为庞大复杂的企业级用户权限控制,权限认证可以只是简单的判断查询,也可以是多种权限模型和身份验证方式的复杂混合。
对于 Java 生态而言,权限认证早已是老生常谈,如 Shiro、Security 等的传统框架已是必经之路。然而,有没有更为简洁、能写更少代码和配置、更为符合实际业务需求的框架呢?
Sa-Token是什么?
sa-token
具有以下优势:简单 :可零配置启动框架,真正的开箱即用,低成本上手 强大 :目前已集成几十项权限相关特性,涵盖了大部分业务场景的解决方案 易用 :如丝般顺滑的API调用,大量特性统统只需一行代码即可实现 高扩展 :几乎所有组件都提供了扩展接口,90%以上的逻辑都可以按需重写
Sa-Token 能做什么?
登录验证 —— 轻松登录鉴权,并提供五种细分场景值
权限验证 —— 适配RBAC权限模型,不同角色不同授权
Session会话 —— 专业的数据缓存中心
踢人下线 —— 将违规用户立刻清退下线
持久层扩展 —— 可集成Redis、Memcached等专业缓存中间件,重启数据不丢失
分布式会话 —— 提供jwt集成和共享数据中心两种分布式会话方案
单点登录 —— 一处登录,处处通行
模拟他人账号 —— 实时操作任意用户状态数据
临时身份切换 —— 将会话身份临时切换为其它账号
无Cookie模式 —— APP、小程序等前后台分离场景
同端互斥登录 —— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录
多账号认证体系 —— 比如一个商城项目的user表和admin表分开鉴权
花式token生成 —— 内置六种token风格,还可自定义token生成策略
注解式鉴权 —— 优雅的将鉴权与业务代码分离
路由拦截式鉴权 —— 根据路由拦截鉴权,可适配restful模式
自动续签 —— 提供两种token过期策略,灵活搭配使用,还可自动续签
会话治理 —— 提供方便灵活的会话查询接口
组件自动注入 —— 零配置与Spring等框架集成
更多功能正在集成中 ...
代码示例
// 标记当前会话登录的账号id
// 建议的参数类型:long | int | String
StpUtil.login(Object id);
// 当前会话注销登录
StpUtil.logout();
// 获取当前会话是否已经登录,返回true=已登录,false=未登录
StpUtil.isLogin();
// 检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`
StpUtil.checkLogin()
权限认证示例 (只有具有user:add
权限的会话才可以进入请求)
@SaCheckPermission("user:add")
@RequestMapping("/user/insert")
public String insert(SysUser user) {
return "用户增加";
}
NotLoginException
异常)// 使账号id为10001的会话注销登录
StpUtil.logoutByLoginId(10001);
StpUtil.login(10001); // 标记当前会话登录的账号id
StpUtil.getLoginId(); // 获取当前会话登录的账号id
StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout(); // 当前会话注销登录
StpUtil.logoutByLoginId(10001); // 让账号为10001的会话注销登录(踢人下线)
StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession(); // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值
StpUtil.login(10001, "PC"); // 指定设备标识登录
StpUtil.logoutByLoginId(10001, "PC"); // 指定设备标识进行强制注销 (不同端不受影响)
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
项目地址
欢迎大家加入我们的技术交流微信群,技术探讨 资料分享 学习互助,还有直播等活动福利等着你~