这是一篇随笔和心得,不会写入任何的一种代码。只是提供一种逻辑。

在我之后,我会发现这种逻辑尤为重要


最近在做一套通用的权限管理项目,考虑使用的是Shiro 的这个框架。认证和鉴权就是权限框架所解决的问题。

对于认证,使用默认的SecurityManager时 Shiro 采用的是将所有的Session信息写入到内存中,来维持会话信息。详情可以看 DefaultSessionManager

DefaultSessionManager 中使用的是基于内存的Session 管理机制,由于面向对象若自己定义的Session管理类继承了其中的某个Session管理类。对于类的初始化皆有调用构造器时隐式的调用父类的构造器进行先初始化

所以对于会话的管理,则转移到了如何对于内存中session的管理,单机情况下用户的注销。在调用注销后,则可以通过使内存中的session失效来实现。

但是在集群环境中并不适合。所以需要通过一种方式来将session持久化保存到一个地方便于session的管理。

这里选用的是redis 并且重写了SessionDao 并且注入容器中用于操作Session

继承并且重写SessionManager 中的GetSessionId方法, 在每次的请求头中获取某一个指定前缀的Token

如果获取不到的话 则调用父类的从Cookie中获取。

由于指定了SecurityManager 中的缓存管理器和UserRealm中的缓存管理器为Redis的CacheManage

所以在用户的登录后的信息,以及用户第一次访问需要权限的资源信息时会调用自定义realm中的授权方法,来校验用户是否有对应的权限。

而如果确定用户是否可以访问不同的权限呢? 在每一次用户获取权限信息时根据不同的业务逻辑将不同的权限字符串或者角色字符串授予指定的角色或者用户即可。

那么在更新用户的权限信息时,由于redis中的权限信息并不会被更新,所以可以对redis中的信息设置某个前缀,在对其进行授后,使其信息失效。这样被授权方,不需要重新登录。在下次访问授权资源的时候则会重新查询数据库权限。

2、第二种方法则是通过jwt 来做校验

jwt做校验的逻辑其实和上述差不多,可以把权限信息放到jwt中在用户访问的时候对其进行解密。 这样服务端则不需要来维护用户的权限信息。

shiro 关闭产生会话,则在用户登录成功后 颁发jwt 然后用户在请求中 一般是头部附带jwt信息。

在服务端获取到token后对其进行解密,然后去访问服务器的资源。

后面的话不想多说了, 某位大佬一句话说的好,就是你想什么是jwt? 它是用来解决什么问题的? 有什么好处? 有什么弊端?

SpringBoot + Shiro + Redis + JWT 实现无状态登录的更多相关文章

  1. JWT+Interceptor实现无状态登录和鉴权

    无状态登录原理 先提一下啥是有状态登录 单台tomcat的情况下:编码的流程如下 前端提交表单里用户的输入的账号密码 后台接受,查数据库, 在数据库中找到用户的信息后,把用户的信息存放到session ...

  2. springboot+shiro+redis(集群redis版)整合教程

    相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3.springboot+shiro+redis(单机red ...

  3. springboot+shiro+redis(单机redis版)整合教程

    相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(集群redis版)整合教程 3.springboot+shiro+redis(单机red ...

  4. Spring Boot Security 整合 JWT 实现 无状态的分布式API接口

    简介 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.JSON Web Token 入门教程 - 阮一峰,这篇文章可以帮你了解JWT的概念.本文重点讲解Spring Boo ...

  5. springboot+shiro+redis(单机redis版)整合教程-续(添加动态角色权限控制)

    相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3. springboot+shiro+redis(集群re ...

  6. springboot security+redis+jwt+验证码 登录验证

    概述 基于jwt的token认证方案 验证码 框架的搭建,可以自己根据网上搭建,或者看我博客springboot相关的博客,这边就不做介绍了.验证码生成可以利用Java第三方组件,引入 <dep ...

  7. shiro jwt 构建无状态分布式鉴权体系

    一:JWT 1.令牌构造 JWT(json web token)是可在网络上传输的用于声明某种主张的令牌(token),以JSON 对象为载体的轻量级开放标准(RFC 7519). 一个JWT令牌的定 ...

  8. springboot+shiro+redis项目整合

    介绍: Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最 ...

  9. SpringBoot+Shiro+Redis共享Session入门小栗子

    在单机版的Springboot+Shiro的基础上,这次实现共享Session. 这里没有自己写RedisManager.SessionDAO.用的 crazycake 写的开源插件 pom.xml ...

  10. 基于JWT的无状态分布式授权【本文摘自智车芯官网】

    简介 JWT是一种用于HTTP交互双方之间传递安全信息的简洁的.安全的表述性声明规范.JWT作为一个开发的标准,它定义了一种简洁的,自包含的方法用于通信双发之间以JSON形式安全传递.且因为数字证书的 ...

随机推荐

  1. for循环-while循环

    for循环 循环语句1--for for循环语句格式: for(初始化表达式①; 布尔表达式②; 步进表达式④){ 循环体③ } 执行流程 执行顺序:①②③④>②③④>②③④-②不满足为止 ...

  2. vue学习笔记(一)---- vue指令( v-on 事件绑定 )

    Vue 中提供了 v-on: 事件绑定机制 绑定的事件处理函数必须定义到vm实例的事件处理函数 methods 中去 <div id="app"> <!-- &l ...

  3. docker03-常用命令

    1.docker基础命令 1.1docker启动 指令:service docker start 1.2查看状态 指令:service docker status 1.3重启docker 指令:ser ...

  4. 为什么称不坑盒子是wps和word使用者的救世主呢?

    不坑盒子 很多朋友在工作过程中需要对Word文档进行编辑处理,如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件,这是一个非常好用的插件工具,专门应用在Word文档中,支持Office 2 ...

  5. 编译OpenCV以及openc_contrib提示缺少boostdesc_bgm.i文件出错的解决

    ~/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:673:20: fatal error: boostdesc_bgm.i: No such ...

  6. js实现一二级域名共享cookie

    前言 最近接手的项目中 ,有人反馈了一个问题,说是在访问网站并登录后,登录成功有登录信息,但是刷新页面后重定向到了登录页面,让从新登录. 打开 goole 调试页面,查看 cookie 时发现存储的相 ...

  7. Rocky Linux安装

    1.下载 VirtualBox并安装 https://www.virtualbox.org/wiki/Downloads 2.下载Rocky Linux 选择 Rocky-9.1-x86_64-dvd ...

  8. ransac拟合

    链接:https://zhuanlan.zhihu.com/p/62238520 RANSAC简介 RANSAC(Random Sample Consensus,随机采样一致)算法是从一组含有&quo ...

  9. CCRD_TOC_2008年第5期

    中信国健临床通讯 2008年第5期 目 录   RA: 临床缓解与亚临床炎症 1.     DMARD诱导缓解的RA患者中仍有影像学确证的亚临床炎症 Brown AK, et al. Arthriti ...

  10. LeetCode 39. 组合总和 40.组合总和II 131.分割回文串

    欢迎关注个人公众号:爱喝可可牛奶 LeetCode 39. 组合总和 40.组合总和II 131.分割回文串 LeetCode 39. 组合总和 分析 回溯可看成对二叉树节点进行组合枚举,分为横向和纵 ...