Shiro + JWT 登录认证授权

  • Post author:
  • Post category:其他




一、解释流程

大体流程:

  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,都通过然后进入自己的

    控制器

    感谢大佬的文章

    原文地址



版权声明:本文为qq_43751336原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。