Shiro权限框架-在线并发登录人数控制(9)

2023-11-12

1、实现原理

在实际开发中,我们可能会遇到这样的需求,一个账号只允许同时一个在线,当账号在其他地方登陆的时候,会踢出前面登陆的账号,那我们怎么实现

  • 自定义过滤器:继承AccessControlFilter

  • 使用redis队列控制账号在线数目

    实现步骤:

1、只针对登录用户处理,首先判断是否登录
2、使用RedissionClien创建队列
3、判断当前sessionId是否存在于此用户的队列=key:登录名 value:多个sessionId
4、不存在则放入队列尾端==>存入sessionId
5、判断当前队列大小是否超过限定此账号的可在线人数
6、超过:
	*从队列头部拿到用户sessionId
	*从sessionManger根据sessionId拿到session
	*从sessionDao中移除session会话
7、未超过:放过操作

2、代码实现

【1】KickedOutAuthorizationFilter

package com.newbies.shiro.filter;

import com.newbies.shiro.core.impl.RedisSessionDao;
import com.newbies.shiro.utils.EmptyUtil;
import com.newbies.shiro.utils.ShiroUserUtil;
import lombok.extern.log4j.Log4j2;
import org.apache.shiro.session.ExpiredSessi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shiro权限框架-在线并发登录人数控制(9) 的相关文章

随机推荐

  • Springboot 多模块集成mybatis提示:Invalid bound statement (not found)

    1 第一步 检查提示错误信息接口namespace 文件是否对应 MyBatis 文件Mapper 接口定义与Mapper xml 文件定义一致 2 整体项目结构截图如下 从项目结构来看 包含两个子模块包含MyBatis 的mapper 文
  • Element之el-switch上显示文字

    如果我们想要在Element组件库中的switch开关组件上显示文字该怎么做 1 Html部分
  • pclint html报告,PC-lint 9 + 中文手册

    实例简介 PCLINT是一种代码检查工具 还包括中文文档 实例截图 核心代码 Pc Lint9 pclint autorun inf DOS ins choose16 exe choose exe install exe lint exe
  • ACE_Message_Block例子

    include ace OS h include ace Message Block h include ace FILE IO h include
  • 【Absible学习】Ansible常用模块---包管理模块

    yum repository模块 yum repository模块可以管理远程主机上的yum仓库 模块参数 参数 说明 name 必须参数 用于指定要操作的唯一的仓库ID 也就是 repo 配置文件中每个仓库对应的 中括号 内的仓库ID b
  • 深度学习--手写数字识别<一>

    手写字符识别数据集THE MNIST DATABASE of handwritten digits http yann lecun com exdb mnist 其中训练集60000例 测试集10000例 加载数据 1 读取数据 usr b
  • 博客营销分析:博客营销的优势+方法技巧+成功案例介绍

    博客营销分析 博客营销的优势 方法技巧 成功案例介绍 一 博客营销是什么 博客营销的定义 首先 先为大家介绍博客的定义 博客是一个可以发布文字 链接 图片 视频的网站 是实现信息分享与交流的平台 而博客营销是博主通过博客内容向网站用户传递信
  • [整理]MySQL8-安装、启动、卸载、初始密码、忘记密码(CentOS,Ubuntu,Widows)

    系统和MySQL更新换代都很快 我用到时会顺手整理在这里 内容没什么技术含量 也不保障内容的全和新 每次遇到问题网上搜索一下很容易找到解决方法的 我工作电脑用Widows Ubuntu WSL 服务器用CentOS 所以三个系统都安装过 C
  • 【Python】字典内容写入json文件

    Python中有序字典和无序字典 一键多值字典 Python将字典内容写入json文件 1 无序字典 目前了解三种 在Python中直接默认的是无序字典 这种不会按照你插入的顺序排序 即使你对字典排序后 返回的也是一个list变量 而不是字
  • echarts的图表双击事件、单击某块、滚轮放大缩小

    echarts的图表双击事件 dblclick
  • 华为机试:HJ2 计算某字符出现次数

    描述 写出一个程序 接受一个由字母 数字和空格组成的字符串 和一个字符 然后输出输入字符串中该字符的出现次数 不区分大小写字母 数据范围 1 le n le 1000 1 n 1000 输入描述 第一行输入一个由字母和数字以及空格组成的字符
  • Android 源码分析 - 系统 - Settings

    core 源代码 core java android provider Settings java 定义一系列配置项名称 索引 常量 SettingsProvider apk 源代码位于 frameworks base packages S
  • 【Vuex入门】——(四)Mutation

    一 Mutation的作用 更改 Vuex 的store 中的状态的唯一方法是提交 mutation Vuex 中的 mutation 非常类似于事件 每个 mutation 都有一个字符串的 事件类型 type 和 一个 回调函数 han
  • Python语言程序设计 习题6

    一 选择题 1 下列Python数据中其元素可以改变的是 A A 列表 B 元组 C 字符串 D 数组 2 表达式 2 in 1 2 3 4 的值是 D A Yes B No C True D False print 2 in 1 2 3
  • python是什么意思中文、好学吗-零基础学python难吗?好学吗?

    Python是一种什么语言 Python是一种计算机程序设计语言 你可能已经听说过很多种流行的编程语言 比如非常难学的C语言 非常流行的Java语言 适合初学者的Basic语言 适合网页编程的JavaScript语言等 Python是他们其
  • 如何使用下标遍历二维数组

    点击打开链接 int my 2d array 10 10 假定数组my 2d array 已经预先被填充了数据 int i j 遍历这个数组 for i 0 i lt 10 i 向下遍历各行 for j 0 j lt 10 j 穿越各列 p
  • Python:Unused import statement 解决方法

    Python 学习 21052501 1 Unused import statement 解决方法 Pycharm file 菜单下有Invalidate caches Restart菜单栏 点击清除缓存重新启动Pycharm即可 2 In
  • 反思深度学习与传统计算机视觉的关系

    来源 算法与数学之美 某种程度上 深度学习最大的优势就是自动创建没有人会想到的特性能力 如今 深度学习在众多领域都有一席之地 尤其是在计算机视觉领域 尽管许多人都为之深深着迷 然而 深网就相当于一个黑盒子 我们大多数人 甚至是该领域接受过培
  • 【C++进阶】二叉搜索树递归与非递归的模拟实现(附源码)

    一 什么是二叉搜索树 二叉搜索树又称二叉排序树 它或者是一棵空树 或者是具有以下性质的二叉树 根据二叉搜索树的性质 它的中序遍历结果就是一个升序列 二 二叉搜索树的模拟实现 节点 Node 在实现二叉搜索树之前 要先定义一个节点 成员变量包
  • Shiro权限框架-在线并发登录人数控制(9)

    1 实现原理 在实际开发中 我们可能会遇到这样的需求 一个账号只允许同时一个在线 当账号在其他地方登陆的时候 会踢出前面登陆的账号 那我们怎么实现 自定义过滤器 继承AccessControlFilter 使用redis队列控制账号在线数目