当前位置 博文首页 > 程序员漫话编程的博客:Java 权限认证框架!

    程序员漫话编程的博客:Java 权限认证框架!

    作者:[db:作者] 时间:2021-09-18 18:54

    大家好,我是朋哥,十年码农经验,对技术情有独钟。

    今天给大家推荐的这个开源项目超级棒,可能是史上功能最全的 Java 权限认证框架!

    图片

    这个开源项目就是:sa-token?。

    Sa-Token是什么?

    sa-token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0 等一系列权限相关问题

    框架针对踢人下线、自动续签、前后台分离、分布式会话……等常见业务进行N多适配,通过sa-token,你可以以一种极简的方式实现系统的权限认证部分

    与其它权限认证框架相比,sa-token?具有以下优势:

    1. 简单?:可零配置启动框架,真正的开箱即用,低成本上手

    2. 强大?:目前已集成几十项权限相关特性,涵盖了大部分业务场景的解决方案

    3. 易用?:如丝般顺滑的API调用,大量高级特性统统只需一行代码即可实现

    4. 高扩展?:几乎所有组件都提供了扩展接口,90%以上的逻辑都可以按需重写

    有了sa-token,你所有的权限认证问题,都不再是问题!

    Sa-Token 能做什么?

    • 登录验证?—— 轻松登录鉴权,并提供五种细分场景值

    • 权限验证?—— 适配RBAC权限模型,不同角色不同授权

    • Session会话?—— 专业的数据缓存中心

    • 踢人下线?—— 将违规用户立刻清退下线

    • 持久层扩展?—— 可集成Redis、Memcached等专业缓存中间件,重启数据不丢失

    • 分布式会话?—— 提供jwt集成和共享数据中心两种分布式会话方案

    • 单点登录?—— 一处登录,处处通行

    • 模拟他人账号?—— 实时操作任意用户状态数据

    • 临时身份切换?—— 将会话身份临时切换为其它账号

    • 无Cookie模式?—— APP、小程序等前后台分离场景

    • 同端互斥登录?—— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录

    • 多账号认证体系?—— 比如一个商城项目的user表和admin表分开鉴权

    • 花式token生成?—— 内置六种token风格,还可自定义token生成策略

    • 注解式鉴权?—— 优雅的将鉴权与业务代码分离

    • 路由拦截式鉴权?—— 根据路由拦截鉴权,可适配restful模式

    • 自动续签?—— 提供两种token过期策略,灵活搭配使用,还可自动续签

    • 会话治理?—— 提供方便灵活的会话查询接口

    • 组件自动注入?—— 零配置与Spring等框架集成

    • 更多功能正在集成中...?—— 如有您有好想法或者建议,欢迎加群交流

    代码示例

    sa-token的API调用非常简单,有多简单呢?以登录验证为例,你只需要:

    //?在登录时写入当前会话的账号id
    StpUtil.setLoginId(10001);
    
    //?然后在任意需要校验登录处调用以下API
    //?如果当前会话未登录,这句代码会抛出?`NotLoginException`异常
    StpUtil.checkLogin();

    至此,我们已经借助sa-token框架完成登录授权!

    此时的你小脑袋可能飘满了问号,就这么简单?自定义Realm呢?全局过滤器呢?我不用写各种配置文件吗?

    事实上在此我可以负责的告诉你,在sa-token中,登录授权就是如此的简单,不需要什么全局过滤器,不需要各种乱七八糟的配置!只需要这一行简单的API调用,即可完成会话的登录授权!

    当你受够Shiro、Security等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,sa-token的API设计是多么的清爽!

    权限认证示例 (只有具有user:add权限的会话才可以进入请求)

    @SaCheckPermission("user:add")
    @RequestMapping("/user/insert")
    public?String?insert(SysUser?user)?{
    return?"用户增加";
    }

    将某个账号踢下线 (待到对方再次访问系统时会抛出NotLoginException异常)

    //?使账号id为10001的会话注销登录
    StpUtil.logoutByLoginId(10001);

    除了以上的示例,sa-token还可以一行代码完成以下功能:

    StpUtil.setLoginId(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.setLoginId(10001,?"PC");??????????//?指定设备标识登录
    StpUtil.logoutByLoginId(10001,?"PC");?????//?指定设备标识进行强制注销?(不同端不受影响)
    StpUtil.switchTo(10044);??????????????????//?将当前会话身份临时切换为其它账号

    开源项目地址:

    https://github.com/click33/sa-token

    关注公众号【程序员漫话编程】,后台回复 ”学习资料“ ?或者 ”实战项目“,即可获得3T视频资源。

    原创不易,有用就关注一下。要是帮到了你 就给个三连吧,多谢支持。

    觉得不错的小伙伴,记得帮我 点个赞和关注哟,笔芯笔芯~**

    作者:朋哥

    有问题请留言或者私信,可以 微信搜索:程序员漫话编程,关注公众号获得更多免费学习资料。

    往期资料:

    https://github.com/ProceduralZC/JavaDevGuide
    https://gitee.com/codegrowth/haomony-develop

    cs