Sa-Token简介

Sa-Token是一款轻量级的Java权限认证框架,可以用来解决登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权等一系列权限相关问题。

框架集成简单、开箱即用、API设计优雅,通过Sa-Token,你将以一种极其简单的方式实现系统的权限认证部分,有时候往往只需一行代码就能实现功能。

Sa-Token功能很全,具体可以参考下图。

使用

在SpringBoot中使用Sa-Token是非常简单的,接下来我们使用它来实现最常用的认证授权功能,包括登录认证、角色认证和权限认证。

集成及配置

Sa-Token的集成和配置都非常简单,不愧为开箱即用。

  • 首先我们需要在项目的pom.xml中添加Sa-Token的相关依赖;

  • 然后在application.yml中添加Sa-Token的相关配置,考虑到要支持前后端分离项目,我们关闭从cookie中读取token,改为从head中读取token。

登录认证

在管理系统中,除了登录接口,基本都需要登录认证,在Sa-Token中使用路由拦截鉴权是最方便的,下面我们来实现下。

  • 实现登录认证非常简单,首先在UmsAdminController中添加一个登录接口;

  • 然后在UmsAdminServiceImpl添加登录的具体逻辑,先验证密码,然后调用StpUtil.login(adminUser.getId())即可实现登录,调用API一行搞定;

  • 我们再添加一个测试接口用于查询当前登录状态,返回true表示已经登录;

  • 之后可以通过Swagger访问登录接口来获取Token了,使用账号为admin:123456,访问地址:http://localhost:8088/swagger-ui/

  • 然后在Authorization请求头中添加获取到的token;

  • 访问/admin/isLogin接口,data属性就会返回true了,表示你已经是登录状态了;

  • 接下来我们需要把除登录接口以外的接口都添加登录认证,添加Sa-Token的Java配置类SaTokenConfig,注册一个路由拦截器SaRouteInterceptor,这里我们的IgnoreUrlsConfig配置会从配置文件中读取白名单配置;

  • application.yml文件中的白名单配置如下,注意开放Swagger的访问路径和静态资源路径;

  • 由于未登录状态下访问接口,Sa-Token会抛出NotLoginException异常,所以我们需要全局处理下;

  • 之后当我们在登录状态下访问接口时,可以获取到数据;

  • 当我们未登录状态(不带token)时无法正常访问接口,返回code为401。

角色认证

角色认证也就是我们定义好一套规则,比如ROLE-ADMIN角色可以访问/brand下的所有资源,而ROLE_USER角色只能访问/brand/listAll,接下来我们来实现下角色认证。

  • 首先我们需要扩展Sa-Token的StpInterface接口,通过实现方法来返回用户的角色码和权限码;

  • 然后在Sa-Token的拦截器中配置路由规则,ROLE_ADMIN角色可以访问所有路径,而ROLE_USER只能访问/brand/listAll路径;

  • 当用户不是被允许的角色访问时,Sa-Token会抛出NotRoleException异常,我们可以全局处理下;

  • 我们现在有两个用户,admin用户具有ROLE_ADMIN角色,macro用户具有ROLE_USER角色;

  • 使用admin账号访问/brand/list接口可以正常访问;

  • 使用macro账号访问/brand/list接口无法正常访问,返回code为403。

权限认证

当我们给角色分配好权限,然后给用户分配好角色后,用户就拥有了这些权限。我们可以为每个接口分配不同的权限,拥有该权限的用户就可以访问该接口。这就是权限认证,接下来我们来实现下它。

  • 我们可以在Sa-Token的拦截器中配置路由规则,admin用户可以访问所有路径,而macro用户只有读取的权限,没有写、改、删的权限;

  • 当用户无权限访问时,Sa-Token会抛出NotPermissionException异常,我们可以全局处理下;

  • 使用admin账号访问/brand/delete接口可以正常访问;

  • 使用macro账号访问/brand/delete无法正常访问,返回code为403。

总结

通过对Sa-Token的一波实践,我们可以发现它的API设计非常优雅,比起Shiro和Spring Security来说确实顺手多了。Sa-Token不仅提供了一系列强大的权限相关功能,还提供了很多标准的解决方案,比如Oauth2、分布式Session会话等,大家感兴趣的话可以研究下。

参考资料

Sa-Token的官方文档很全,也很良心,不仅提供了解决方式,还提供了解决思路,强烈建议大家去看下。

官方文档:http://sa-token.dev33.cn/

再见Spring Security、推荐一款功能强大的权限认证框架相关推荐

  1. 再见Spring Security!推荐一款功能强大的权限认证框架,用起来够优雅!

    ‍ ‍在我们做SpringBoot项目的时候,认证授权是必不可少的功能!我们经常会选择Shiro.Spring Security这类权限认证框架来实现,但这些框架使用起来有点繁琐,而且功能也不够强大. ...

  2. 还在用Spring Security?推荐你一款使用简单、功能强大的权限认证框架

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/qq_40058629/article/ details/116692302 我们先看一下官网介绍 ...

  3. 向大家推荐一款功能强大且免费的杀毒软件:avast! 4 Professional Edition

     向大家推荐一款功能强大且免费的杀毒软件:avast! 4 Professional Edition 这是本人最近刚刚搜集到的杀毒软件,没想到这么好用,而且还免费,功能强大,再也不用像以前那样去找盗版 ...

  4. Spring Security 3.1 中功能强大的加密工具 PasswordEncoder

    去年发生的密码泄漏事件,我们也对密码加密做了重新研究.  在筛选加密方法的过程中,发现了Spring Security 3.1.0版本中提供了新的PasswordEncoder,它的加密方法非常给力! ...

  5. php简介的编辑器,推荐几款功能强大的PHP编辑器

    这里介绍了一些 PHP IDE 工具,非常见的 Editplus 之类的,都是专门为 PHP 开发的,有兴趣都可以试试看,找出自己用得顺手的就可以了,我推荐3个Zend Studio,DzSoft P ...

  6. 推荐一款功能强大的日程管理App

    我推荐一款待办事项管理的App,我认为功能强大,用习惯了堪称提效神器.名字叫<安心记待办>,可以下载试试,非常棒 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 「安心记待办 ...

  7. 推荐一款功能强大的Tomcat 管理监控工具,可替代Tomcat Manager

    我们在本地启动Tomcat服务器后,用localhost:<默认端口>访问: 再点Manager App,即可进入Tomcat自带的Manager这个应用,此处可以单独部署/卸载每一个应用 ...

  8. java 免费图表控件_推荐10款功能强大且免费的JavaScript图形图表插件

    1.D3 D3是最流行的可视化库之一,它可以将任意数据绑定到DOM(Document Object Model,文档对象模型),然后对该文件提供数据驱动转换. 2.Rickshaw Rickshaw ...

  9. 推荐一款功能强大的js 在线编辑器

    http://jszi.cn/public/oherub/11/edit

最新文章

  1. 泛函编程—模板函数_类模板
  2. RS232详解(续)
  3. C#获取数据库表信息,列信息
  4. python执行cmd并返回是否成功_python脚本执行CMD命令并返回结果的例子
  5. Docker Centos 7.X部署Tomcat 并且修改Server.xml配置文件方案 并设置时区 只要十一步
  6. OPCClient远程连接OPC服务器配置手册 【转】
  7. linux运维、架构之路-Nginx服务
  8. WPF 绕圈进度条(一)
  9. 报表默认执行查询及汉字无法查询原因处理
  10. 极域九法——小白看得懂的退出极域电子教室教程
  11. 四川省副高级职称计算机考试试题,四川省职称计算机考试题库.doc
  12. 【OpenCV】Chapter7.图像噪声与滤波器
  13. flink的mysql两阶段提交_Flink 源码之两阶段提交
  14. vue项目html5调取手机摄像头录像并上传
  15. 中国80后十大CEO
  16. Python3简单爬虫:爬取猫眼评分top100电影
  17. 高等数学(预备知识之对数函数)
  18. Question7:  针对诡异的HTML编码错乱问题个例
  19. [小o地图-数据] - 下载行政区范围内的POI数据
  20. php+js 五星评价,基于jquery实现五星好评

热门文章

  1. (转载)书蕴——基于书评的人工智能推荐系统
  2. SIM逻辑模型与APDU
  3. C# textbox快捷键添加横杠
  4. lambda表达式 拉姆达
  5. C#之三十七 实体类
  6. 浙大oj(Basic Practice)1004
  7. 关于loop unwinding
  8. Python实现的一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台,不用配置各种运行环境
  9. android listview 的下拉刷新
  10. Linux系统yum源的三种配置方法