Shiro + JWT 登录认证授权

一、解释流程

大体流程:

  1. 用户使用username和secret登陆,将sercret通过MD5加密,通过username查询库中是否有该条记录,并比较加密后的密码是否相同登陆成功后利用JWTutil生成带过期时间的token以后发送请求时都需要在header中添加Authorization字段附加该token信息

  2. 结合程序实现一个JWTutil,在其中实现利用登陆信息生成token,根据token获取username,token验证等方法;

  3. 实现一个JWTFilter继承BasicHttpAuthenticationFilter类,该拦截器需要拦截所有请求除(除登陆、注册等请求),用于判断请求是否带有token,并获取token的值传递给shiro的登陆认证方法作为参数,用于获取token;

  4. 定义ShiroRealm继承AuthorizingRealm类,在其中实现登陆验证权限获取的方法;

  5. 定义ShiroConfig配置类,用于生成ShiroManage及将shiroRealm交付给ShiroManage处理,并将jwtFilter添加进shiro的拦截器链

  6. controller中可以使用**@RequiresPermissions来对用户权限进行拦截**;

  7. 数据库表设计(user、role、menu表)项目中页面、按钮需要在菜单控制中进行添加,包括对应的请求链接、权限控制代码,前端也需要对按钮进行权限限制,使用v-hasPermission,控制代码与配置需一致。

    此流程原文地址

二、 简要流程,

  1. 前端请求登录,传入用户名和密码和令牌token

  2. 后端进入jwtFilter拦截判断当前请求中是否是登录请求

  3. 如果是登录请求,就不执行shiro认证和授权,直接进入控制器进行帐号和密码校验校验成功生成token返回

  4. 如果是非登录请求,jwtFilter执行executeLogin方法进入自定义realm进行认证doGetAuthenticationInfo(认证不通过,抛出异常,然后调用异常处理)和授权doGetAuthorizationInfo,都通过然后进入自己的控制器

    感谢大佬的文章 原文地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值