所有分类
  • 所有分类
  • 未分类

Shiro整合jwt-通过url控制权限

简介

说明

本文用实例介绍SpringBoot整合shiro的方法。采用jwt+url权限的方式控制权限。

  1. 使用jwt替代默认的authc作为认证方式,通过url路径控制授权。
  2. 其他尽量使用原生的shiro配置,尽量少自定义配置。
  3. 我自测通过,代码可用。

shiro用法我写了一个系列

有如下文章:

  1. Shiro整合jwt-通过注解控制权限 – 自学精灵
  2. Shiro整合jwt-通过url控制权限 – 自学精灵
  3. Shiro整合Session-通过注解控制权限 – 自学精灵
  4. Shiro整合shiro-redis – 自学精灵

关联文章

本文是在此文章基础上进行修改,修改点如下:

  • 数据库
    • t_permission表的name字段改为url字段
    • t_permission相应的插入的数据发生变化
  • Mapper
    • PermissionMapper
      • 原先:返回t_permission.name字段
      • 本文:返回t_permission.url字段
  • Controller
    • 原先:使用@RequiresPermissions、@RequiresRoles控制权限
    • 本文:去掉这两个注解,通过url控制权限
  • Shiro配置
    • 注册授权过滤器(url路径过滤器)
      • 提供url路径过滤器(UrlFiter类)
      • 将url路径过滤器注册进去(ShiroConfig#shiroFilterFactoryBean) 
    • 修改认证过滤器(JwtFilter)
      • 原先:只需通过返回true或者executeLogin即可
      • 本文:自定义响应数据。(若不这么写,响应数据会很不友好,因为我们已经不是shiro的标准用法了)

除了上述修改之外,其他的代码、逻辑一点都没变。

效果展示

测试超级管理员(admin)

启动项目,访问:http://localhost:8080/doc.html

1.测试登录

  1. 登录成功
  2. 可以看到,会返回来一个Set-Cookie头,值是token。

2.测试有资源权限的接口

本处测试增加产品接口。

  1. 成功访问。
  2. 在请求时会传递Cookie

我使用标准的:Set-Cookie,Cookie来做认证的。若是自定义的header,需要手动写入:

3.测试登出

4.再次访问接口

  1. 访问成功。
  2.  因为token还没过期,浏览器也还会将其发给服务端,所以成功。

测试产品管理员(productManager)

启动项目,访问:http://localhost:8080/doc.html

1.测试登录

  1. 登录成功
  2. 可以看到,会返回来一个Set-Cookie头,值是token。

2.测试有资源权限的接口

本处测试增加产品接口。

  1. 成功访问。
  2. 在请求时会传递Cookie

3.测试无资源权限的接口

本处测试增加订单接口。

  1. 访问失败。
  2. 在请求时会传递Cookie
  3. 有一处细节:提示是红色的。

点进去看,可以看到状态码是我指定的:403

重启服务再请求

1.登录

登录成功 

2.重启服务器

重启Idea启动的应用。

3.访问有权限的接口

本处访问产品增加接口。

  1. 可以看到,访问成功。

超时后再请求

1.修改配置文件,暂时将token过期时间改短(本处改为10秒)

application.yml

2.登录

3.等待大于10秒之后再请求

请求失败。

我代码里指定这种错误为401,点进去验证下:

代码

此内容仅限VIP查看,请先
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录