shiro 对缓存的管理:
存放缓存是一个ConcurrentMap<String, Cache> caches;caches是一个线程安全的ConcurrentMap类型,在这里,至少存放两个Cache,一个是用来存放session的,一个是用来存放权限(Authorization)的,shiro先从caches里拿,如果拿不到相应的Cache,就调用createCache创建一个,createCache是抽象方法,由子类实现。创建完之后,放到Map中。
shiro创建两个Cache放到ConcurrentMap中,一个name中ShiroCasRealm.authorizationCache(这个名字的命名规则是自定义的realm的名字加".authorizationCache"),这个是shiro启动的时候创建的,用来保存认证信息,一个叫shiro-activeSessionCache(如果session配置成shiro管理并利用缓存),这个是第一次创建session的时候创建的,用来保存session。当用户登录的时候,将会把用户的权限信息保存到name为ShiroCasRealm.authorizationCache的Cache中,以后需要再使用权限信息,直接从Cache中拿而不需要再从数据库中查询。这样也有一个问题,就是当用户权限改变时,就需要用户重新登录把权限信息从新load到Cache中。不过既然我们知道Cache的名字,我们就可以拿到这个Cache,然后把用户的权限信息删除,让shiro在授权时找不到权限而shiro自己从新去load,甚至我们可以删除了,然后再从新load到Cache中
配置缓存管理器:
<bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <!--classpath是缓存属性的配置文件 --> <property name="cacheManagerConfigFile" value="classpath:config/ehcache-shiro.xml" /> </bean>
自定义的Ream,给ShiroRealm指定cacheManager(不指定启动shiro会报提示
):
<bean id="shiroRealm" class="com.xxx.ShiroRealm" > <property name="authorizationCacheName" value="shiro-authorizationCache"/> <property name="cacheManager" ref="shiroEhcacheManager"/> </bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="shiroRealm"></property> <!--注入缓存管理器 --> <property name="cacheManager" ref="shiroEhcacheManager"></property> </bean>
- 缓存属性配置文件:
<ehcache updateCheck="false" name="shiroCache"> <defaultCache <!--最大缓存数量 --> maxElementsInMemory="10000" eternal="true" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" clearOnFlush="false" /> </ehcache>
name:缓存名称。
maxElementsInMemory:缓存最大个数。
eternal:对象是否永久有效,一但设置了,timeout将不起作用。
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
maxElementsOnDisk:硬盘最大缓存个数。
diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
clearOnFlush:内存数量最大时是否清除。
Shiro提供了默认的EHCache的配置xml,如果你要配置自己的EHCache.xml,需要注意以下几点: 1:overflowToDisk=“true” - 这确保当你溢出进程内存时,会话不丢失且能够被序列化到磁盘上。 2: eternal=“true” - 确保缓存项(Session 实例)永不过期或被缓存自动清除。这是很有必要的,因为Shiro 基于计划过程完成自己的验证。如果我们关掉这项,缓存将会在Shiro 不知道的情况下清扫这些Sessions,这可能引起麻烦。 3:如果你想使用一个不同的名字而不是默认的,你可以在EnterpriseCacheSessionDAO 上配置名字,例如:sessionDAO.activeSessionsCacheName = myname 只要确保在ehcahe.xml 中有一项与这个名字匹配
相关推荐
`shiro-redisson` 模块就是为了解决这个问题,将 Shiro 的缓存(Cache)和会话(Session)管理功能与 Redis 结合,实现了基于 Redis 的分布式解决方案。 1. **Redisson 库的介绍** Redisson 是一个全面的 Redis ...
了解和使用这些jar包,开发者可以根据项目需求选择合适的模块,通过配置Shiro的 Ini、XML 或 Java 配置文件,实现安全框架的集成。例如,通过`Realm`类实现与数据库或其他后端服务的交互,自定义身份验证和授权逻辑...
在实际开发过程中,开发者可以根据项目需求调整这四个组件的具体配置,例如优化Mybatis的SQL执行效率,调整Shiro的权限策略,或者利用Redis的高级特性如发布订阅模式来实现更复杂的功能。此外,通过持续集成和自动化...
在这样的集成环境中,"master"分支应该包含了SpringMVC的配置文件(如spring-mvc.xml)、MyBatis的配置文件(mybatis-config.xml和Mapper XML文件)、Shiro的配置文件(shiro.ini或对应的Java配置)以及Redis的配置...
- 使用 Shiro 提供的过滤器(如 `authc` 和 `perms`)配置Web应用的安全拦截。 - 利用 Shiro 提供的加密工具对敏感数据进行处理。 6. **Shiro的扩展性** Shiro 的设计允许开发者自定义认证和授权策略,创建自己...
9. **org.apache.shiro.config**: 配置管理,支持XML和Java配置API,方便设置Shiro的行为。 10. **org.apache.shiro.cache**: 缓存管理,用于优化性能,如存储已验证的用户信息、权限信息等。 11. **org.apache....
9. **shiro-ehcache-1.7.1.jar**:Shiro的EhCache缓存支持,用于存储session等信息,提高性能和减少数据库压力。 在使用Shiro 1.7.1时,开发者可以根据具体需求选择合适的模块进行集成,例如,Web应用可能会主要...
7. **缓存管理(Caching)**:Shiro 提供了缓存机制,可以将用户的权限信息缓存起来,提高权限验证的效率,减少数据库查询的次数。 在Spring MVC环境下集成Shiro,通常需要以下步骤: 1. 引入依赖:将"shiro-all-...
3. 配置Shiro的CacheManager:在Shiro的配置中,将创建的`RedisManager`实例设置为`CacheManager`,以便Shiro使用Redis进行缓存操作: ```java DefaultSecurityManager securityManager = new ...
6. **缓存管理**:Shiro支持缓存策略,提高授权和会话管理的效率,减少数据库查询次数。 7. **测试工具**:Shiro提供了测试类,方便开发者在单元测试中模拟用户身份和权限。 8. **简单API**:Shiro的API设计简洁...
6. **缓存管理**:Shiro 可以利用缓存来提高性能,例如,将用户的权限信息存储在内存中,减少对数据库的查询。 7. **测试支持**:Shiro 提供了测试工具,使得在单元测试和集成测试中能够方便地模拟用户和安全性。 ...
在Shiro中,我们可以配置`CacheManager`使用Redis,将用户的权限信息、Session数据等缓存到Redis中,减少数据库访问压力。Shiro提供了与Redis集成的API,方便开发者进行配置和操作。 6. **Web集成** "shiro-web-...
2. **Caches**:为了提高性能,Shiro 支持缓存,包括会话缓存和授权信息缓存,减少对底层数据源的频繁访问。 3. **Filters**:Shiro 提供了一系列过滤器,它们可以插入到 Web 应用的过滤链中,处理如登录、权限检查...
5. **缓存机制**:Shiro支持缓存来提高性能,学习如何利用缓存存储权限和会话信息,减少对数据库的访问。 6. **Web安全实践**:包括登录注销功能的实现,以及如何防止常见的Web攻击,如CSRF(跨站请求伪造)和XSS...
- **Caching**:Shiro支持缓存机制,可以提高性能,尤其是在大量权限检查的场景下。 熟悉Shiro的API并根据需求配置 Realm,你可以轻松地在应用程序中实现用户认证、授权以及会话管理。同时,通过阅读源码,开发者...
7. **配置 Shiro**:在不自定义缓存的情况下,Shiro 的配置文件(如 `shiro.ini` 或 `Java配置类`)通常会缺少关于缓存的相关设置。开发者可以通过添加 `cacheManager` 配置项来指定自定义缓存实现。 总结,"shiro-...
- **性能优化**:监控Shiro的性能,比如会话超时策略、缓存策略等,确保系统高效运行。 - **分布式环境**:在分布式系统中,需要考虑会话复制或共享,Shiro支持基于Redis或Memcached的分布式会话管理。 通过以上...
6. **shiro-spring-1.2.3.jar**:与Spring框架的集成库,使得Shiro的组件可以轻松地在Spring环境中配置和使用。 7. **shiro-cas-1.2.3.jar**:支持Central Authentication Service(CAS)协议,用于单点登录(SSO)...
本项目是一个将Apache Shiro与Redis缓存系统整合到Spring框架中的实例,旨在提升应用程序的安全性和性能。以下是对这个项目及其相关技术的详细解读。 **Apache Shiro** Apache Shiro是一个强大且易用的Java安全框架...
MyBatis的二级缓存配置包括: 1. 在mybatis-config.xml中开启二级缓存,并指定缓存实现(默认使用内存实现,也可自定义如Ehcache)。 2. 在Mapper XML文件中启用二级缓存,针对特定的Mapper或全项目。 3. 编写...