日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發(fā)布時(shí)間:2025/3/12 javascript 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习Spring Boot:(十九)Shiro 中使用缓存 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在 shiro 中每次去攔截請(qǐng)求進(jìn)行權(quán)限認(rèn)證的時(shí)候,都會(huì)去數(shù)據(jù)庫查詢?cè)撚脩舻乃袡?quán)限信息, 這個(gè)時(shí)候就是有一個(gè)問題了,因?yàn)橛脩舻臋?quán)限信息在短時(shí)間內(nèi)是不可變的,每次查詢出來的數(shù)據(jù)其實(shí)都是重復(fù)數(shù)據(jù),沒必要每次都去重新獲取這個(gè)數(shù)據(jù),統(tǒng)一放在緩存中進(jìn)行管理,這個(gè)時(shí)候,我們只需要獲取一次權(quán)限信息,存入到緩存中,待緩存過期后,再次重新獲取即可。

例如,我執(zhí)行一個(gè)查詢多次,它執(zhí)行多次權(quán)限查詢。

使用 Reids 緩存

加入 shiro-redis 依賴

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

配置 Redis

和前面系統(tǒng)配置 Reids 一樣。
\1. 在系統(tǒng)配置文件中加入 Redis 配置參數(shù):

spring:redis:host: 192.168.19.200 # host ,默認(rèn) localhostport: 6379 # 端口號(hào),默認(rèn)6379pool:# 設(shè)置都是默認(rèn)值,可以按需求設(shè)計(jì)max-active: 8 # 可用連接實(shí)例的最大數(shù)目,默認(rèn)值為8;如果賦值為-1,則表示不限制;max-idle: 8 # 控制一個(gè)pool最多有多少個(gè)狀態(tài)為idle(空閑的)的redis實(shí)例,默認(rèn)值也是8。max-wait: -1 # 等待可用連接的最大時(shí)間,單位毫秒,默認(rèn)值為-1,表示永不超時(shí)。min-idle: 0 # 控制一個(gè)pool最少有多少個(gè)狀態(tài)為idle(空閑的)的redis實(shí)例,默認(rèn)值為0。timeout: 0 # 連接超時(shí)時(shí)間 單位 ms,默認(rèn)為0password: master # 密碼,根據(jù)自己的 redis 設(shè)計(jì),默認(rèn)為空
  • 這個(gè)我們是要使用 RedisManager 管理我們的 Redis,它默認(rèn)沒有注入我們?cè)O(shè)置的這些參數(shù),需要我們自己手動(dòng)創(chuàng)建一個(gè)注入我們?cè)O(shè)置的參數(shù)。
  • @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();// 可以添加多個(gè)認(rèn)證,執(zhí)行順序是有影響的securityManager.setRealm(oAuth2Realm);securityManager.setSessionManager(sessionManager);// 注冊(cè) 緩存securityManager.setCacheManager(cacheManager);return securityManager;}

    使用測試

    我們加入緩存后,看是個(gè)什么情況:

    執(zhí)行多次請(qǐng)求,只執(zhí)行了一次查詢權(quán)限的 SQL。

    可以去 redis-cli 查看 keys,檢查是否存在權(quán)限對(duì)象的 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 配置

    新增一個(gè) 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小時(shí) --><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();// 可以添加多個(gè)認(rèn)證,執(zhí)行順序是有影響的securityManager.setRealm(oAuth2Realm);securityManager.setSessionManager(sessionManager);// 設(shè)置緩存securityManager.setCacheManager(ehCacheManager);return securityManager;}

    參考文章

    • Spring Boot Shiro中使用緩存

    總結(jié)

    以上是生活随笔為你收集整理的学习Spring Boot:(十九)Shiro 中使用缓存的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。