JWT

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。

我们利用一定的编码生成 Token,并在 Token 中加入一些非敏感信息,将其传递。

一个完整的 Token :eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM

在本项目中,我们规定每次请求时,需要在请求头中带上 token ,通过 token 检验权限,如没有,则说明当前为游客状态(或者是登陆 login 接口等)

JWTUtil

我们利用 JWT 的工具类来生成我们的 token,这个工具类主要有生成 token 和 校验 token 两个方法

生成 token 时,指定 token 过期时间 EXPIRE_TIME 和签名密钥 SECRET,然后将 date 和 username 写入 token 中,并使用带有密钥的 HS256 签名算法进行签名

数据库表

role: 角色;permission: 权限;ban: 封号状态

每个用户有对应的角色(user,admin),权限(normal,vip),而 user 角色默认权限为 normal, admin 角色默认权限为 vip(当然,user 也可以是 vip)

过滤器

我们需要自定义自己的过滤器 JWTFilter,JWTFilter 继承了 BasicHttpAuthenticationFilter,并部分原方法进行了重写

该过滤器主要有三步:

  1. 检验请求头是否带有 token ((HttpServletRequest) request).getHeader("Token") != null
  2. 如果带有 token,执行 shiro 的 login() 方法,将 token 提交到 Realm 中进行检验;如果没有 token,说明当前状态为游客状态(或者其他一些不需要进行认证的接口)
  1. 如果在 token 校验的过程中出现错误,如 token 校验失败,那么我会将该请求视为认证不通过,则重定向到 /unauthorized/**

另外,我将跨域支持放到了该过滤器来处理

Realm 类

  • 身份认证

拿到传来的 token ,检查 token 是否有效,用户是否存在,以及用户的封号情况

  • 权限认证

利用 token 中获得的 username,分别从数据库查到该用户所拥有的角色,权限,存入 SimpleAuthorizationInfo 中

ShiroConfig 配置类

设置好我们自定义的 filter,并使所有请求通过我们的过滤器,除了我们用于处理未认证请求的 /unauthorized/**

权限控制注解 @RequiresRoles, @RequiresPermissions

这两个注解为我们主要的权限控制注解, 如

当我们写的接口拥有以上的注解时,如果请求没有带有 token 或者带了 token 但权限认证不通过,则会报 UnauthenticatedException 异常,但是我在 ExceptionController 类对这些异常进行了集中处理

这时,出现 shiro 相关的异常时则会返回

功能实现

用户角色分为三类,管理员 admin,普通用户 user,游客 guest;admin 默认权限为 vip,user 默认权限为 normal,当 user 升级为 vip 权限时可以访问 vip 权限的页面。

具体实现可以看源代码。末尾附上

登陆

登陆接口不带有 token,当登陆密码,用户名验证正确后返回 token。

异常处理

权限控制

  • UserController(user 或 admin 可以访问)
  • 在接口上带上 @RequiresRoles(logical = Logical.OR, value = {"user

数据权限过滤_带你实现SpringBoot整合JWT+Shiro进行权限认证「附源码地址」相关推荐

  1. 利用SpringBoot和Vue实现前后端分离(附源码)

    利用SpringBoot和Vue实现前后端分离(附源码) 引言: 本文主要分享了SpringBoot和Vue整合实现前后端分离,实现了简单的增删查改:包括:项目的搭建.后端的实现.前台的实现:(附源码 ...

  2. Springboot实战:Springboot+Netty优雅的创建websocket客户端 (附源码下载)

    Springboot-cli 开发脚手架系列 Netty系列:Springboot+Netty优雅的创建websocket客户端 (附源码下载) 文章目录 Springboot-cli 开发脚手架系列 ...

  3. 炫酷,SpringBoot+Echarts实现用户访问地图可视化(附源码)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 SpringBoot+Echarts用户访问地图可视化 意义 在常 ...

  4. 通用权限管理系统组件 中集成多个子系统的单点登录(网站入口方式)附源码

    通用权限管理系统组件 (GPM - General Permissions Manager) 中集成多个子系统的单点登录(网站入口方式)附源码 上文中实现了直接连接数据库的方式,通过配置文件,自定义的 ...

  5. wallpaper代码_五行Python代码自动换你的电脑桌面壁纸(内附源码和exe)

    很多行友问行哥,Python能不能自动更换电脑壁纸呀,今天它来了 只需要一行代码,指定图片地址即可更换电脑桌面.加上壁纸文件夹路径,让你随机更换电脑桌面,带来不期而遇的新鲜.使用爬虫技术,自动下载壁纸 ...

  6. 【超详细】SpringBoot与Shiro整合-权限管理实战实操(附源码地址)

    一.搭建SpringBoot开发环境 1. 安装好开发软件和Maven等 开发工具:Spring Tool Suite(TST) Maven :3.3.9 jdk:1.8 2. 创建springboo ...

  7. animation基础练习源码_用vue简单写一个音乐播放组件「附源码」

    作者:vipbic 转发链接:https://segmentfault.com/a/1190000022980992 前言 上次小编也分享一个关于Vue 开发过音乐播放对项目: 基于 electron ...

  8. 一款SpringBoot轻量级物联网综合业务支撑平台,附源码

    SpringBoot轻量级物联网综合业务支撑平台源码 开发语言 : JAVA 数据库 : MySQL 开发工具 : IDEA 源码类型:全开源免费分享,需要学习可私信. 一.系统概述: 物联网综合业务 ...

  9. 基于 SpringBoot 开发的在线短链生成系统(附源码)

    前言 分享一个基于 SpringBoot 开发的在线短链生成系统,在线短链接生成器. 完整项目源码在文章结尾处,大家自行下载即可~ 一.实现功能 1.将长链接转换成短链接,访问短链接时, 302重定向 ...

最新文章

  1. 使用 Go module 后 VScode 智能提示不生效解决方案
  2. ORA-06502 when awr report produce
  3. 为什么像王者荣耀这样的游戏 Server 不愿意使用微服务?
  4. [20160910]低级错误.txt
  5. RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践
  6. java中 移位运算_java中关于移位运算符的demo与总结(推荐)
  7. (十二)洞悉linux下的Netfilteramp;iptables:iptables命令行工具源码解析【下】
  8. jquery修改带!important的css样式
  9. 华为慧通和华为区别_华为P30与华为P30 pro 的区别
  10. 【BZOJ4200】[Noi2015]小园丁与老司机 DP+最小流
  11. 联想笔记本大写提示软件_联想威6 2021款怎么样?值得买吗?下面几点或许可以帮到您...
  12. wps怎么下载仿宋gb2312_仿宋|如何下载仿宋gb2312字体_wps仿宋gb2312字体下载方法_234游戏网...
  13. openpcdet KeyError: ‘road_plane‘
  14. SAP PI SLD RZ70 系统架构目录数据提供者 HTTP(S) 配置
  15. [CTF]Brainfuck/Ook!编码
  16. 4、keygen激活secureCRT
  17. 多元函数泰勒级数展开_二元函数的泰勒展开二元函数的泰勒展开.pdf
  18. 电脑开机黑屏错误代码U盘重装系统教学
  19. 订阅号 openid php,微信“订阅号”如何存放openid,并在其他页面使用
  20. 【Quant专栏】量化交易之自动化下单(1)——通过迅投QMT系统实现自动化下单

热门文章

  1. 数字图像处理(修正的阿尔法均值滤波)
  2. C语言开发数字华容道实现,jQuery实现数字华容道小游戏(实例代码)
  3. 为移动化办公保驾护航,指掌易获高成资本领投2亿元B轮融资
  4. 今天会用了正则表达式
  5. 查找亚马逊listing关键字的7个技巧值得你看!
  6. scikit-learn 中 OneHotEncoder 解析
  7. OpenCV系列之傅里叶变换 | 三十
  8. Redis命令详解:Connection
  9. Showmebug Moka 3位大咖助阵半导体行业专场直播
  10. JQuery基础-》带有案例-隔行换色-全选-QQ表情-下拉框左右移动