学习Spring Boot:(十九)Shiro 中使用缓存

前言

在 shiro 中每次去拦截请求进行权限认证的时候,都会去数据库查询该用户的所有权限信息, 这个时候就是有一个问题了,因为用户的权限信息在短时间内是不可变的,每次查询出来的数据其实都是重复数据,没必要每次都去重新获取这个数据,统一放在缓存中进行管理,这个时候,我们只需要获取一次权限信息,存入到缓存中,待缓存过期后,再次重新获取即可。

例如,我执行一个查询多次,它执行多次权限查询。
image

使用 Reids 缓存

加入 shiro-redis 依赖

<!-- shiro-redis -->
<dependency><groupId>org.crazycake</groupId><artifactId>shiro-redis</artifactId><version>2.4.2.1-RELEASE</version>
</dependency>

配置 Redis

和前面系统配置 Reids 一样。
\1. 在系统配置文件中加入 Redis 配置参数:

spring:redis:host: 192.168.19.200 # host ,默认 localhostport: 6379 # 端口号,默认6379pool:# 设置都是默认值,可以按需求设计max-active: 8 # 可用连接实例的最大数目,默认值为8;如果赋值为-1,则表示不限制;max-idle: 8  # 控制一个pool最多有多少个状态为idle(空闲的)的redis实例,默认值也是8。max-wait: -1 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。min-idle: 0 # 控制一个pool最少有多少个状态为idle(空闲的)的redis实例,默认值为0。timeout: 0 # 连接超时时间 单位 ms,默认为0password: master # 密码,根据自己的 redis 设计,默认为空
  1. 这个我们是要使用 RedisManager 管理我们的 Redis,它默认没有注入我们设置的这些参数,需要我们自己手动创建一个注入我们设置的参数。
@ConfigurationProperties(prefix = "spring.redis")
public class CustomRedisManager extends RedisManager {}

配置 Shiro 缓存

    /*** redis 管理*/@Beanpublic CustomRedisManager customRedisManager() {return new CustomRedisManager();}/*** redis 缓存*/@Beanpublic RedisCacheManager cacheManager(CustomRedisManager redisManager) {RedisCacheManager redisCacheManager = new RedisCacheManager();redisCacheManager.setRedisManager(redisManager);return redisCacheManager;}@Beanpublic SecurityManager securityManager(OAuth2Realm oAuth2Realm, SessionManager sessionManager, RedisCacheManager cacheManager) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();// 可以添加多个认证,执行顺序是有影响的securityManager.setRealm(oAuth2Realm);securityManager.setSessionManager(sessionManager);// 注册 缓存securityManager.setCacheManager(cacheManager);return securityManager;}

使用测试

我们加入缓存后,看是个什么情况:
image

执行多次请求,只执行了一次查询权限的 SQL。

可以去 redis-cli 查看 keys,检查是否存在权限对象的 key。

使用 Ehcache 缓存

加入依赖

<!-- shiro ehcache -->
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-ehcache</artifactId><version>1.3.2</version>
</dependency>
<!-- ehchache -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId>
</dependency>

Ehcache 配置

新增一个 Ehcache 配置文件 shiro-ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"updateCheck="false"><diskStore path="java.io.tmpdir/Tmp_EhCache" /><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="false"diskPersistent="false"diskExpiryThreadIntervalSeconds="120" /><!-- 登录记录缓存锁定1小时 --><cache name="passwordRetryCache"maxEntriesLocalHeap="2000"eternal="false"timeToIdleSeconds="3600"timeToLiveSeconds="0"overflowToDisk="false"statistics="true" />
</ehcache>

配置 EhCache 缓存

    /*** EhCache 缓存*/@Beanpublic EhCacheManager ehCacheManager() {EhCacheManager em = new EhCacheManager();em.setCacheManagerConfigFile("classpath:config/shiro-ehcache.xml");return em;}@Beanpublic SecurityManager securityManager(OAuth2Realm oAuth2Realm, SessionManager sessionManager,RedisCacheManager cacheManager, EhCacheManager ehCacheManager) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();// 可以添加多个认证,执行顺序是有影响的securityManager.setRealm(oAuth2Realm);securityManager.setSessionManager(sessionManager);// 设置缓存securityManager.setCacheManager(ehCacheManager);return securityManager;}

参考文章

  • Spring Boot Shiro中使用缓存

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

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

相关文章

matlab安装无效距离过远,求助matlab的远程序

求助matlab的远程序function varargout a1(varargin)% A1 M-file for a1.fig% A1, by itself, creates a new A1 or raises the existing% singleton*.%% H A1 returns the handle to a new A1 or the handle to% the existing singleton*.%% A1(CALLBACK,hObject,eventData,…

学习Spring Boot:(二十)使用 MongoDB

前言 MongoDB&#xff08;来自于英文单词“Humongous”&#xff0c;中文含义为“庞大” &#xff09;是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoD…

php 事件调度,PHP单元测试调度事件

如何在函数调用期间测试事件是否被调度&#xff1f;public function updateUser() {//Do some update stuff$event new UserUpdated($user);$event->attach([new SendEmailAddressChangeEmail($emailAddress),new SendEmailAddressChangeEmail($oldEmailAddress),]);$event…

学习Spring Boot:(二十一)使用 EhCache 实现数据缓存

前言 当多次查询数据库影响到系统性能的时候&#xff0c;可以考虑使用缓存&#xff0c;来解决数据访问新能的问题。 SpringBoot 已经为我们提供了自动配置多个 CacheManager 的实现&#xff0c;只要去实现使用它就可以了。 一般的系统都是优先使用 EhCache&#xff0c;它工作…

php如何解决报错,php 启动报错如何解决_PHP教程

复制代码 代码如下:[rootabc lnmp]# service php-fpm startStarting php-fpm eAccelerator: Could not allocate 67108864 bytes, the maximum size the kernel allows is 33554432 bytes. Lower the amount of memory request or increase the limit in /proc/sys/kernel/shmm…

学习Spring Boot:(二十二)使用 AOP

前言 AOP&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。基于AOP实现的功能不会破坏原来程序逻辑&#xff0c;因此它可以很好的对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的…

matlab怎么求hadamard,hadamard matlab

3、图像Hadamard变换 数字图像处理 ? Matlab没有提供图像Hadamard变换功能,不过 提供了求Hadamard变换矩阵的功能。例如使用 命令hadamard(8)能够得到下面[8 8]的......(A) 1.0000 命令 hadamard 矩阵 函数 hadamard 格式 H hadamard(n) 例 1-15 >> hhadamard(4) h 1 1…

学习Spring Boot:(二十三)Spring Boot 中使用 Docker

前言 简单的学习下怎么在 Spring Boot 中使用 Docker 进行构建&#xff0c;发布一个镜像&#xff0c;现在我们通过远程的 docker api 构建镜像&#xff0c;运行容器&#xff0c;发布镜像等操作。 这里只介绍两种方式&#xff1a; 远程命令 api &#xff08;需要知道 Docker …

nginx php大文件上传,Nginx+PHP上传大文件设置

nginx的修改send_timeout 60;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;client_max_body_size 30m; 可以全局设置也可以每个网站单独设置php的修改upload_max_filesize 10Mpost_max_size 15M 该项应该要大于 upload_max_filesizemax_inp…

学习Spring Boot:(二十四)多数据源配置与使用

前言 随着业务量增大&#xff0c;可能有些业务不是放在同一个数据库中&#xff0c;所以系统有需求使用多个数据库完成业务需求&#xff0c;我们需要配置多个数据源&#xff0c;从而进行操作不同数据库中数据。 正文 JdbcTemplate 多数据源 配置 需要在 Spring Boot 中配置…

matlab 超限像素平滑法,matlab超限像素平滑法_图像增强技术.ppt

主讲&#xff1a;苏菡 susuhansicnu.edu.cn 图象增强技术概述 目标&#xff1a;“视觉”效果更好&#xff0c;图象保真度不是首要目标 方法&#xff1a; 空间域增强&#xff1a;直接处理图象的象素 频率域增强&#xff1a;修改图象的傅立叶变换 评价&#xff1a;高度主观 视觉解…

学习Spring Boot:(二十五)使用 Redis 实现数据缓存

前言 由于 Ehcache 存在于单个 java 程序的进程中&#xff0c;无法满足多个程序分布式的情况&#xff0c;需要将多个服务器的缓存集中起来进行管理&#xff0c;需要一个缓存的寄存器&#xff0c;这里使用的是 Redis。 正文 当应用程序要去缓存中读取数据&#xff0c;但是缓存…

php ai库,收藏 | 深度学习框架、AI库、ML库、NLP库、CV库汇总!

一份包含深度学习框架、AI工具/库、机器学习工具/库、NLP工具/库、CV工具/库的汇总&#xff0c;并附有说明文档(有些是中英文文档都有)。之所以附带文档而不是源码&#xff0c;有两方面原因&#xff1a;先看文档&#xff0c;找出最适合自己的一个或两个(太多没必要&#xff0c;…

学习Spring Boot:(二十六)使用 RabbitMQ 消息队列

前言 前面学习了 RabbitMQ 基础&#xff0c;现在主要记录下学习 Spring Boot 整合 RabbitMQ &#xff0c;调用它的 API &#xff0c;以及中间使用的相关功能的记录。 相关的可以去[我的博客/RabbitMQ] 正文 我这里测试都是使用的是 topic 交换器&#xff0c;Spring Boot 2.…

appnode php,环境软件路径参考

[TOC]## Nginx* 主程序路径&#xff1a;/usr/sbin/nginx* 配置文件路径&#xff1a;/etc/nginx.conf* 服务控制命令&#xff1a;* CentOS 6&#xff1a;service nginx start|stop|reload|restart* CentOS 7&#xff1a;systemctl start|stop|reload|restart nginx.service## PH…

学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator

前言 主要是完成微服务的监控&#xff0c;完成监控治理。可以查看微服务间的数据处理和调用&#xff0c;当它们之间出现了异常&#xff0c;就可以快速定位到出现问题的地方。 springboot - version: 2.0 正文 依赖 maven 项目 在 pom.xml 文件中加入 actuator 的依赖&…

php实现注销功能,laravel 实现用户登录注销并限制功能

在项目根目录输入&#xff1a; php artisan make:controller Admin/LoginControllerphp artisan make:model Model/Admin -m运行之后 项目中会新增两个PHP文件新创建了admins用户表&#xff0c;此用户表默认新建中只有主键&#xff0c;创建时间&#xff0c;编辑时间。我们接下来…

将ipynb文件转为py的简单方法(图文并茂)

打开可以使用jupyter命令的命令窗口&#xff08;如果没有jupyter则需要先安装jupyter&#xff09;&#xff0c;cd 命令进入到 ipynb 文件所在的文件夹&#xff0c;执行 jupyter nbconvert --to script xxx.ipynb 即可完成 ipynb 文件到 py 文件的转化&#xff0c;执行 jupyter …

学习Spring Boot:(二十八)Spring Security 权限认证

前言 主要实现 Spring Security 的安全认证&#xff0c;结合 RESTful API 的风格&#xff0c;使用无状态的环境。 主要实现是通过请求的 URL &#xff0c;通过过滤器来做不同的授权策略操作&#xff0c;为该请求提供某个认证的方法&#xff0c;然后进行认证&#xff0c;授权成…

在PHP中如何要json中的数据,如何在不知道键值的情况下在php中读取JSON数据

我需要在php中读取firebase JSON URL然后显示它.我的firebase得到了以下.json数据&#xff1a;{"dDsdE4AlB7P5YYd4fWbYTQKCLPh1":{"email":"abhigmail.com","name":"abhishek"},"z1ceiLhdh9YVu7lGnVvqDWoWHFH3":{…