当前位置: 首页 > news >正文

若依shiro非前后端分离项目集群化改造

文章目录

    • 前言
    • 一、若依shiro框架登录流程概述
      • 1.登录入口
      • 2.UserRealm下的登录认证方法
      • 3.ShiroConfig配置说明
      • 4.OnlineSessionDAO类
    • 二、开始改造
      • 1.导入依赖
      • 2.yml加入配置,让redis来接管session
      • 3.重构OnlineSessionDAO类(核心)
      • 4.ShiroService新增方法通过会话序号删除信息
      • 5.ShiroConfig下配置RedisManager
      • 6.项目启动
      • 7.nginx集群配置
      • 8.结果验证

前言

        若依前后端不分离基础项目,使用shiro框架作为授权和认证的安全框架。对比前后端分离项目的token验证机制,不分离项目仍然采用的是cookie + session的组合,浏览器存储的cookie与服务端的session进行校验。

        项目集群方案,前后端分离项目有着天然的优势,前后端不分离项目就要考虑session共享的问题了。因为session机制对于单机应用是没问题的,在集群环境下,当请求被分配到另一台服务器时,新的服务器无法通过浏览器传入的cookie值取到session,这样登录状态就会验证失败。以若依shiro前后端不分离项目为例,核心是通过redis进行session共享来解决。

一、若依shiro框架登录流程概述

先梳理明白登录认证的流程,了解shiro安全认证的机制,才好改造,不然流程都糊里糊涂的,肯定会有一大堆问题。

1.登录入口

在这里插入图片描述

2.UserRealm下的登录认证方法

在这里插入图片描述

3.ShiroConfig配置说明

在这里插入图片描述

安全管理器

在这里插入图片描述

会话管理器

在这里插入图片描述

最后,Shiro过滤器配置没什么说的

4.OnlineSessionDAO类

存储会话session信息,继承自org.apache.shiro.session.mgt.eis包下的EnterpriseCacheSessionDAO类,并重写doReadSession(获取会话)、doDelete(会话停止时删除会话)方法。

在这里插入图片描述
在这里插入图片描述

二、开始改造

基本登录流程梳理清楚之后,就要开始着手改造了。

1.导入依赖

pom文件中导入spring-session-data-redis和shiro-redis的依赖

在这里插入图片描述

另外,spring-boot-devtools热部署的依赖需要注释掉,不然会报OnlineSession转换失败的错误

在这里插入图片描述

2.yml加入配置,让redis来接管session

在这里插入图片描述

3.重构OnlineSessionDAO类(核心)

原来继承自org.apache.shiro.session.mgt.eis包下的EnterpriseCacheSessionDAO类,现在改为继承org.crazycake.shiro包下的RedisSessionDAO类,并且重写update、delete、doCreate、doReadSession方法,如下:

public class OnlineSessionDAO extends RedisSessionDAO
{/*** 同步session到数据库的周期 单位为毫秒(默认1分钟)*/@Value("${shiro.session.dbSyncPeriod}")private int dbSyncPeriod;/*** 上次同步数据库的时间戳*/private static final String LAST_SYNC_DB_TIMESTAMP = OnlineSessionDAO.class.getName() + "LAST_SYNC_DB_TIMESTAMP";/*** SESSION 超时时间*/public static final int SESSION_TIME_OUT = 8 * 60 * 60;/*** SESSION会话*/public final static String CACHE_SESSION = "CACHE:SESSION:";private RedisSerializer valueSerializer = new ObjectSerializer();@Autowiredprivate SysShiroService sysShiroService;@Autowiredprivate StringRedisTemplate redisTemplate;public OnlineSessionDAO()

http://www.mrgr.cn/news/31538.html

相关文章:

  • 技术大神把Linux装进Intel 4004?4 位运算能力,640字节内存地址!怎么做到的?
  • windows环境下配置MySQL主从启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘
  • 音视频入门基础:AAC专题(3)——AAC的ADTS格式简介
  • python 多边形越界
  • Python | Leetcode Python题解之第420题强密码检验器
  • 煤矿智慧矿井数据集 (1.煤矿采掘工作面智能分析数据集2.煤矿井下钻场智能分析数据集 )
  • zabbix7.0容器化部署测试--(1)准备容器镜像
  • Rust 文件与 IO
  • 【Python】探索 Errbot:多功能聊天机器人框架
  • SOAP 实例
  • C 标准库 - <ctype.h>
  • Python中使用Scikit-learn进行线性回归分析的实用指南
  • 如何在 PHP 中处理 MySQL 的结果集
  • 关于机器学习和深度学习的区别有哪些?
  • 道路坑洞分割数据集/道路裂纹分割数据集
  • golang学习笔记31——golang 怎么实现枚举
  • AI学习指南深度学习篇-Adagrad超参数调优与性能优化
  • Java对象一口气讲完!φ(* ̄0 ̄)
  • 详细分析分布式事务场景、理论基础以及解决方法
  • 松材线虫目标检测数据集,12522张图-纯手工标注