Shiro支持很多第三方緩存工具。官方提供了shiro-ehcache,實現了把EHCache當做Shiro的緩存工具的解決方案。其中最好用的一個功能是就是緩存認證執行的Realm方法,減少對數據庫的訪問。
1 添加依賴
添加shiro-ehcache依賴。
commons-io主要是為了使用里面的工具類。本質和當前整合功能沒有關系。
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.4.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
2 編寫ehcache緩存配置
在resources下新建ehcache/ehcache-shiro.xml
<?xml version="1.0" encoding="UTF-8"?> <ehcache name="ehcache" updateCheck="false"> <!-- 磁盤緩存位置 --> <diskStore path="java.io.tmpdir"/> <!-- 默認緩存 --> <defaultCache maxEntriesLocalHeap="1000" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="3600" overflowToDisk="false"> </defaultCache> <!-- 登錄記錄緩存 鎖定10分鍾 --> <cache name="loginRecordCache" maxEntriesLocalHeap="2000" eternal="false" timeToIdleSeconds="600" timeToLiveSeconds="0" overflowToDisk="false" statistics="true"> </cache> </ehcache>
3 修改配置文件
@Bean public DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager manager = new DefaultWebSecurityManager(); HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); hashedCredentialsMatcher.setHashAlgorithmName("md5"); hashedCredentialsMatcher.setHashIterations(2); myRealm.setCredentialsMatcher(hashedCredentialsMatcher); manager.setRealm(myRealm); manager.setRememberMeManager(rememberMeManager()); manager.setCacheManager(getEhCacheManager()); return manager; } @Bean public EhCacheManager ehCacheManager(){ EhCacheManager ehCacheManager = new EhCacheManager(); InputStream is = null; try { is = ResourceUtils.getInputStreamForPath("classpath:ehcache/ehcache-shiro.xml"); } catch (IOException e) { e.printStackTrace(); } net.sf.ehcache.CacheManager cacheManager = new net.sf.ehcache.CacheManager(is); ehCacheManager.setCacheManager(cacheManager); return ehCacheManager; }