Shiro权限框架-实现分布式会话SessionManager(7)

2023-11-16

1、会话的问题

2、分布式会话实现思路

【1】原理分析

​ 所有服务器的session信息都存储到了同一个Redis集群中,即所有的服务都将 Session 的信息存储到 Redis 集群中,无论是对 Session 的注销、更新都会同步到集群中,达到了 Session 共享的目的。

 

​ Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。

​ 在实际工作中我们建议使用外部的缓存设备(包括Redis)来共享 Session,避免单个服务器节点挂掉而影响服务,共享数据都会放到外部缓存容器中

【2】设计类图详解

3、RedisSessionDao

RedisSessionDao继承AbstractSessionDAO,重写了会话的创建、读取、修改等操作,全部缓存与redis中

package com.newbies.shiro.core.impl;

import com.newbies.shiro.constant.CacheConstant;
import com.newbies.shiro.utils.ShiroRedissionSerialize;
import lombok.extern.log4j.Log4j2;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.eis.AbstractSessionDAO;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.TimeUnit;

/**
 * @Description 实现shiro session的memcached集中式管理~
 */
@Log4j2
public class RedisSessionDao extends AbstractSessionDAO {

	@Resource(name = "redissonClientForShiro")
	RedissonClient redissonClient;

	private Long globalSessionTimeout;

	@Override
	protected Serializable doCreate(Session session) {
		Serializable sessionId = generateSessionId(session);
		assignSessionId(session, sessionId);
//		log.info("=============创建sessionId:{}",sessionId);
		RBucket<String> sessionIdRBucket = redissonClient.getBucket(CacheConstant.GROUP_CAS+sessionId.toString());
		sessionIdRBucket.trySet(ShiroRedissio
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shiro权限框架-实现分布式会话SessionManager(7) 的相关文章

  • java安全框架-Shiro和Spring Security基础dome

    代码不就不复制了 直接去下拉吧 https github com zyh yb Security Shiro Framework maven security
  • SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置

    序 关于标题 说是教学 实在愧不敢当 但苦与本人文笔有限 实在找不到更合理 谦逊的词语表达 只能先这样定义了 其实最真实的想法 只是希望这个关键词能让更多的人浏览到这篇文章 也算是对于自己写文章的一个肯定吧 关于内容 再写这系列文章之前 本
  • SpringBoot 整合shiro框架

    网上有很多整合shiro的博客分享 但是貌似没找到一个完整 并且能够实现的 不是包的问题 就是代码的问题 也可能是自己的问题 或者版本的问题 所以 整理了一版自己已应用的 maven依赖
  • shiro 动态修改资源权限不需要重启项目或者重新登录用户

    用shiro做权限控制的时候 变更用户或者角色的权限后刷新界面不会重新加载权限 需要重启tomcat或者用户重新登录 特别的不人性化 通过下面的方式可以解决这个问题 但仅仅针对于单机 对集群来说就不太清楚 以后有了更好的方法再去使用 菜鸟级
  • springboot2+shiro+redis限制同一账号同时在线人数

    springboot2 shiro redis限制同一账号同时在线人数 我们在写系统的时候 需要注意账号安全问题 最好的处理方法就是同一个账号只能在一个地方登录 原理 大概的原理就是每次登录的时候将登录的sessionId存入缓存 然后登录
  • shiro配置文件shiro.ini简介说明

    转自 shiro配置文件shiro ini简介说明 下文笔者讲述shiro配置文件shiro ini的简介说明 如下所示 shiro ini 是一个shiro的配置文件 它通常放在classpath路径下 shiro ini配置文件包含以下
  • Shiro简单配置Springboot版(3)

    6 整合SpringBoot项目实战 6 0 整合思路 6 1 创建springboot项目 6 2 引入shiro依赖
  • Shiro权限框架-Realm缓存机制(6)

    1 Realm缓存机制意义 在上面我们自定了自己的realm 但是我们发现 在认证和授权的时候 程序需要频繁的访问数据库 这样对于数据库的压力可想而知 那我们怎么处理呢 2 Realm缓存机制实现思路 1 缓存机制图解 2 原理分析 此时我
  • Shiro实战学习笔记(2)-自定义Realm

    1 自定义realm package org tzb realm import org apache shiro authc AuthenticationException import org apache shiro authc Aut
  • Shiro学习笔记。

    授权需要继承 AuthorizingRealm 类 并实现其 doGetAuthorizationInfo 方法 AuthorizingRealm 类继承自 AuthenticatingRealm 但没有实现 AuthenticatingR
  • shiro权限管理

    shiro ssm maven实现的权限管理 里面包含数据库文件 演示地址 登录 后台管理 包含角色管理 管理员可以对每个角色进行菜单分配 菜单管理 可以添加菜单 有子父级 用户管理 操作日志 系统日志 系统监控 在此基础上二次开发简直完美
  • 关于shiro反序列化漏洞一次完整的攻击

    1 1 漏洞原理 Apache Shiro框架提供了记住密码的功能 RememberMe 用户登录成功后会生成经过加密并编码的cookie 在服务端对rememberMe的cookie值 先base64解码然后AES解密再反序列化 就导致了
  • 自定义实现OAuth2.0 授权码模式

    文章目录 OAuth2 0 授权码模式 实践 依赖知识 术语 授权码流程 认证服务器 拉起请求用户授权页面 用户手动授权 提交授权 生成code 下发Token 第三方应用 收到code并请求Token 访问受保护的资源 项目结构 Tomc
  • 用户登录的详细流程(二)JWT生成token登录

    JWT生成token登录 1 jwt的构成 1 header 2 payload 3 signature 2 token的登陆原理 3 在实际中如何应用token 1 设置token的生成代码 2 如何从token中获取有用的信息 3 验证
  • shiro通过注解方式自定义控制接口无需认证访问的解决过程

    1 需求背景 用过Shiro的小伙伴都知道 shiro提供两种权限控制方式 通过过滤器或注解 我们项目是springboot vue前后分离项目 后台对于权限控制一直使用的是过滤器的方式 并且还有自定义的过滤器 大概如下 Bean shir
  • Shiro总结和常见面试题

    Shiro总结和常见面试题 一 什么是shiro Shiro是一个强大易用的java安全框架 提供了认证 授权 加密 会话管理 与web集成 缓存等功能 对于任何一个应用程序 都可以提供全面的安全服务 相比其他安全框架 shiro要简单的多
  • 如何在Java中实现行级安全性?

    我目前正在评估身份验证 授权框架 Apache Shiro 看起来很好 但我是缺少行级安全性特征 例如 数据库中可能存在特殊行 这些行只能由具有特殊权限的用户可见和访问 为了避免不必要的往返 我们当前修改 SQL 查询以与我们的授权数据连接
  • Apache Shiro JdbcRealm 与 JavaConfig 和 Spring Boot

    我正在尝试配置我的 Spring Boot 应用程序以使用 Apache Shiro 作为其安全框架 我已经完成了与 PropertiesRealm 一起使用的所有操作 现在我正在尝试使其与 JdbcRealm 和 Spring Boot
  • Java – 高效、数据库感知的实例级授权?

    在 JPA 应用程序中 我有一个场景 其中该应用程序是 列出给定用户有权提款的所有帐户 我有帐户实体和一个多对多表 其中列出了每个用户对每个帐户拥有的授权 为了实现上述场景 应用程序当前只是内部联接两个表 这非常快 现在 我计划添加一个显式
  • 如何配置 JDBCRealm 从 JNDI 获取其数据源

    你如何使用JDBCRealm在 servlet 中处理用户身份验证和授权 我能找到的唯一示例是在中创建数据源web xml 例如使用 shiro 1 2 1 对数据库进行身份验证 https stackoverflow com questi

随机推荐

  • Qt缺少Mysq驱动QMYSQL driver not loaded

    如果Qt在指定Mysql驱动时 报了这样的错说明缺少mysql相关的动态链接库 QSqlDatabase QMYSQL driver not loaded QSqlDatabase available drivers QSQLITE QOD
  • 从0开始的(c语言)数据结构学习 3:栈

    注 本文以造轮子为主 属于相对理论性 教学性的东西 在实际使用中 如果你是c 请直接 include lt stack gt 理解 什么是栈 你现在有一个放网球的竖球筒 每次你放进去的球都会放在最上面 同理 当你要取出来一个球的时候 也只能
  • 攻防世界misc——misc1

    打开题目 获得字符串 d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b
  • Kali无法打开Firefox浏览器

    本文章鉴于我本人的学习过程 起初我是能正常打开Firefox浏览器的 在我提升了root权限后浏览器就打不开了 于是我看了几篇其他人解决的办法 解决办法如下 用chown改变权限 输入 chown R root 目前我所遇到的就是这种情况
  • 计算机网络安全的背景

    虽然传统的计算机发展和当今的电子商务不同 但是不可否认网络已经成 为非常重要的信息和数据互换交换的平台 但是随着网络不断发展渗透到人们的日 常生活 手机终端 交易支付等环节时 网络安全已经成为一个焦点和不可逾越的 发展鸿沟 尽管目前网上支付
  • json 插入数据_使用python将数据存入SQLite3数据库

    作者 JiekeXu 2017年毕业于某本科院校 从事于数据库运维行业 一个热爱Python的DBA 个人公众号 JiekeXu之路 Python从网站上抓取的数据为了可以重复利用 一般都会存储下来 存储方式最简单的会选择存储到文本文件 常
  • 微信中的video属性设置

  • python数据驱动测试设计_Python Selenium 之数据驱动测试的实现

    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧 使用数据驱动的模式 可以根据业务分解测试数据 只需定义变量 使用外部或者自定义的数据使其参数化 从而避免了使用之前测试脚本中固定的数据 可以将测试脚本与测试数据分离 使得测试脚本在不同
  • 【 视频 】NTSC和PAL电视制式

    今天的电视机还沿用着50年代彩色电视发明时的标准 它们就是NTSC 国家电视制式委员会 和PAL 逐行倒相 NTSC多用于美国和日本 二战 PAL多用于欧洲 澳大利亚 中东和亚洲地区 本文将介绍NTSC和PAL的主要概念 这些知识对更现代的
  • 苹果Mac电脑文件夹路径怎么看?“访达”也能显示文件路径

    Windows系统中 我的电脑 或 资源管理器 会显示文件 文件夹路径 Mac在 访达 中却不显示 确实不便 也让人费解 连 三指拖移 都是默认不开启 Mac有这类奇怪逻辑就一点也不奇怪了 是的 这是苹果最不可理喻之处 老子就是要到处嚷嚷
  • 力扣刷题(day0011)两个数组的交集

    给定两个数组 nums1 和 nums2 返回 它们的交集 输出结果中的每个元素一定是 唯一 的 我们可以 不考虑输出结果的顺序 示例 1 输入 nums1 1 2 2 1 nums2 2 2 输出 2 示例 2 输入 nums1 4 9
  • python中的连续比较是什么_Python算法的分治算法,python,之,连续,子,列表,最大,和...

    连续子列表的最大和 在一个列表中找到连续子列表的最大和 列表中的数字可负可正 并且子列表不能为空 问题提出 找到以下列表的最大子列表的和 2 1 3 4 1 2 1 5 4 解题思路 最大子列表有可能在左子列表 右子列表与右子列表之间 我们
  • python小数格式:不用科学计数法、不截断

    对于一个小数 如 0 0000000000001 想得到相应的字符串 而不是转换为 1e 12 可以用 numpy 的 format float positional import numpy as np a 0 0001 b 0 0000
  • anaconda安装所有库代码集总

    1 安装jupyter conda install jupyter
  • 接口请求合并的3种技巧,性能直接爆表!

    将相似或重复请求在上游系统中合并后发往下游系统 可以大大降低下游系统的负载 提升系统整体吞吐率 文章介绍了 hystrix collapser ConcurrentHashMultiset 自实现BatchCollapser 三种请求合并技
  • 5.3.6 复合主键@IdClass

    有时一个实体的主键可能同时为多个 例如同样是之前使用的 CustomerEO 实体 需要通过name和email来查找指定实体 当且仅当name和email的值完全相同时 才认为是相同的实体对象 要配置这样的复合主键 步骤如以下所示 1 编
  • 快速排序(Java实现) 单边循环、多边循环

    package com xiaoxin sort import java util Arrays public class quickSort me public static void main String args int arr 9
  • 关于CSS及JS的使用技巧浅谈

    使用CSS预处理器 例如Sass和Less 可以帮助开发者更快速 更有效地编写CSS代码 模块化 将CSS和JS代码分解为模块 可以帮助开发者更好地组织和管理代码 压缩和合并 使用压缩工具可以帮助减少CSS和JS文件的大小 使网站更容易加载
  • minikube单机安装nfs服务

    1 安装 nfs server sudo apt get update sudo apt get install y nfs kernel server 2 创建目录 配置 IP 共享目录绑定 vim etc exports 新增 data
  • Shiro权限框架-实现分布式会话SessionManager(7)

    1 会话的问题 2 分布式会话实现思路 1 原理分析 所有服务器的session信息都存储到了同一个Redis集群中 即所有的服务都将 Session 的信息存储到 Redis 集群中 无论是对 Session 的注销 更新都会同步到集群中