shiro认证缓存信息导致:修改用户信息后立刻重新登录仍然能登录问题

问题描述

  • 使用shiro进行权限认证
  • 并且,使用了shiro的缓存管理,ehcache.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="shiroCache"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"><!-- 	<diskStore path="java.io.tmpdir" /> --><diskStore path="C:\test" /><defaultCache maxElementsInMemory="10000"maxElementsOnDisk="0" eternal="true" overflowToDisk="true"diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="0"diskSpoolBufferSizeMB="50" diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LFU" /><!-- 缓存授权信息 -->	<cache name="expectauthorizationCache" maxEntriesLocalHeap="5000"eternal="false" timeToIdleSeconds="180" timeToLiveSeconds="600"overflowToDisk="true" statistics="true"></cache><!-- 缓存认证信息 -->	<cache name="expectauthenticationCache" maxEntriesLocalHeap="5000"eternal="false" timeToIdleSeconds="180" timeToLiveSeconds="600"overflowToDisk="true" statistics="true"></cache><!-- shiro session的缓存 --><cache name="shiroSessionCache" maxEntriesLocalHeap="5000"eternal="false" timeToIdleSeconds="60" timeToLiveSeconds="60"overflowToDisk="true" statistics="true"></cache></ehcache>

如上配置,当用户登录后会 通过“缓存认证信息”对其认证进行缓存,只有在缓存时间到期后,缓存才会消失!!

  • 如果在缓存到期之前,再次登录,那么shiro就不会去调用相关的业务认证AuthorizingRealm的实现,如:访问数据库的用户信息(是否是待审核状态等等)
  • 那么,如题“立刻重新登录”,此时缓存的认证信息还为过期,也就不会去调用相关的业务认证AuthorizingRealm的实现, 也就是 虽然 用户信息修改了要等待审核,审核通过之后才能登陆,但是,由于缓存的存在,并且缓存并未到期,所以,实际上并不会走这部分业务验证。所以! 可以立刻重新登录(不必等待审核)。
  • 解决 : 在修改用户信息时,手动清除认证的缓存信息,关键代码如下:
			    @Autowiredprivate EhCacheManager ehCacheManager;// 清除认证的缓存信息Doctor doctorLogin = (Doctor)SecurityUtils.getSubject().getPrincipal();Cache<String, ?> cache = ehCacheManager.getCache("doctorauthenticationCache");// 这里remove取的是登录的用户名Object obj = cache.remove(doctorLogin.getCellphone());return map;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux------命令行参数

目录 前言 一、main函数的参数 二、命令行控制实现计算器 三、实现touch指令 前言 当我们在命令行输入 ls -al &#xff0c;可以查看当前文件夹下所有文件的信息&#xff0c;还有其他的如rm&#xff0c;touch等指令&#xff0c;都可以帮我们完成相应的操作。 其实运行这些…

为什么USB要转TTL

我个人理解为什么要usb转ttl&#xff0c;因为usb它为提高传输“01”数据的速度&#xff0c;USB在源数据基础上添加了一些传输协议&#xff0c;而ttl它很纯粹只会发送“01”数据。这个两个者与TCP和UDP的关系有点类似。 您的理解是正确的。USB&#xff08;Universal Serial Bus…

【语音合成】中文-多情感领域-16k-多发音人

模型介绍 语音合成-中文-多情感领域-16k-多发音人 框架描述 拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TTS系统获得了广泛的应用&#xff0c;故此处仅涉及参数法。 参数TTS系统可分为两大模块&#xff1a;前端和后端。 前端包含文本正则、分词、多音字预…

push 本地文件到指定的 git 地址分支上,推送失败

项目场景&#xff1a; 背景&#xff1a; push 本地文件到指定的 git 地址分支上&#xff0c;推送失败 问题描述 遇到的问题&#xff1a; To https://gitee.com/aaaaaaab.git! [rejected] print -> print (non-fast-forward) error: failed to push some refs to …

C++ //练习 4.38 说明下面这条表达式的含义。

C Primer&#xff08;第5版&#xff09; 练习 4.38 练习 4.38 说明下面这条表达式的含义。 double slope static_cast<double>(j / i);环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 将j / i的结果强制转换为double型&am…

【C++】构造函数、初始化列表,析构函数,拷贝构造函数,运算符重载

注&#xff1a;本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载。 目录 注&#xff1a;本博客图片来源于学习笔记: 学习笔记https://gitee.com/box-he-he/learning-notes 完整思维导图请前往该博主码云下载…

2024无参考图像的清晰度评价方法

无参考图像质量评价算法 无参考图像质量评价是指参考图像不存在的情况下&#xff0c;直接计算失真图像的视觉质量。根据无参考图像质量评价模型在计算图像视觉质量时是否需要图像的主观分数来进行训练&#xff0c;无参考图像质量评价算法可分为基于监督学习的无参考图像质量评价…

2024-02-06 TCP/UDP work

1. 画出TCP三次握手和四次挥手的示意图&#xff0c;并且总结TCP和UDP的区别 三次握手&#xff1a; 4次挥手&#xff1a; tcp/udp区别 TCP 1. 稳定&#xff0c;提供面向连接的&#xff0c;可靠的数据传输服务 2. 传输过程中&#xff0c;数据无误、数据无丢失、数据无失序、…

IDEA 配置以及一些技巧

1. IDEA设置 1.1 设置主题 1.2 设置字体和字体大小 1.3 编辑区的字体用ctrl鼠标滚轮可以控制大小 1.4 自动导包和优化多余的包 1.5 设置编码方式 1.6 配置 maven 1.7 设置方法形参参数提示 1.8 设置控制台的字体和大小 注意&#xff1a;设置控制台字体和大小后需要重启IDEA才会…

C++服务器开发(3):创建服务器主循环

在C中创建服务器主循环可以使用多种方式实现&#xff0c;其中一种常见的方式是使用socket编程库&#xff0c;如Boost.Asio。 #include <iostream> #include <boost/asio.hpp>using namespace boost::asio; using namespace boost::asio::ip;int main() {try {// 创…

第1章 认识Flask

学习目标 了解Flask框架&#xff0c;能够说出Flask框架的发展史以及特点 熟悉隔离Python环境的创建方式&#xff0c;能够独立在计算机上创建隔离的Python环境 掌握Flask的安装方式&#xff0c;能够独立在计算机上安装Flask框架 掌握PyCharm配置隔离环境的方式&#xff0c;能…

黑名单管理

文章目录 一、黑名单的基本概念二、名单管理对比三、黑名单管理的三个阶段3.1 分散管理3.2 统一管理3.3 组件化管理 四、黑名单来源4.1 外部名单4.2 内部名单 五、黑名单-名单标准 一、黑名单的基本概念 1、黑名单&#xff1a;应该被惩治或有嫌疑而被注意者的秘密名单。 2、银…

Nginx-Ingress如何配置qps限制

背景 从网上找了各种资料&#xff0c;都没说清楚如何配置k8s上的nginx-ingress的qps 试了n小时之后&#xff0c;搞定了。如下&#xff1a; 步骤 第一步&#xff1a;找到你的value.yaml文件 第二步&#xff1a;里面有个 controller.config 配置&#xff0c;增加一个 http-sn…

【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 命名空间 命名空间的定义 命名空间的使用 命名空间的嵌套使用 C输入&输出 std命名空间的使用惯例&…

C语言第二十弹---指针(四)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、字符指针变量 2、数组指针变量 2.1、数组指针变量是什么&#xff1f; 2.2、数组指针变量怎么初始化 3、⼆维数组传参的本质 4、函数指针变量 4.1…

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

腾讯云与IBM共同打造“高性能计算服务解决方案“

腾讯云与IBM共同打造"高性能计算服务解决方案" 腾讯云与IBM达成战略合作&#xff0c;对优势产品及服务进行深度集成&#xff0c;基于腾讯云产品及服务&#xff0c;共同打造"腾讯-IBM混合云与人工智能解决方案"。双方通过更为紧密的嵌入式解决方案的深度合…

二进制安全虚拟机Protostar靶场(8)heap3 Fastbins unlink exploit

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 heap3 程序静态分析 https://exploit.education/protostar/heap-three/#include <stdlib.h> #include …

故障诊断 | 一文解决,TCN时间卷积神经网络模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,TCN时间卷积神经网络模型的故障诊断(Matlab) 模型描述 时间卷积神经网络(TCN)是一种用于序列数据建模和预测的深度学习模型。它通过卷积操作在时间维度上对序列数据进行特征提取,并且可以处理可变长度的输入序列。 要使用TCN进行…

3D室内虚拟灭火体验为预防火灾提供全新方案

室内火灾常见于充电器未拔、电动车、油锅起火及煤气泄露等原因&#xff0c;由于室内空间小、易燃物多&#xff0c;因此极易造成较大的人员财产损失&#xff0c;3D仿真还原技术、通过1&#xff1a;1模拟还原火灾发生全过程&#xff0c;火灾VR安全培训提供全方位、真实感强的模拟…