shiro整合ehcache AND SessionManager

1 Ehcache 緩存

輸入圖片說明

輸入圖片說明

<!-- 5 配置緩存管理器 -->
		<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
			<property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml"></property>
		</bean>
<!-- 2  配置安全管理器  securityManager-->
		<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
			<property name="realm" ref="customRealm"></property>
			<!-- 注入緩存管理器 -->
			<property name="cacheManager" ref="cacheManager"></property>
		</bean>

shiro-ehcache.xml文件web

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">     
    <diskStore path="h:\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:內存數量最大時是否清除。     
    -->     
    <defaultCache     
            maxElementsInMemory="10000"    
            eternal="false"    
            timeToIdleSeconds="120"    
            timeToLiveSeconds="120"    
            overflowToDisk="true"    
            maxElementsOnDisk="10000000"    
            diskPersistent="false"    
            diskExpiryThreadIntervalSeconds="120"    
            memoryStoreEvictionPolicy="LRU"    
            />     
</ehcache>

輸入圖片說明

/**
	 * 清空緩存(通常在修改權限的service中調用)
	 */
	public void clearCached(){
		PrincipalCollection principals=SecurityUtils.getSubject().getPrincipals();
		super.clearCache(principals);
	}

清空緩存測試 (這是模擬測試 在controller中進行):spring

package com.shi.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.shi.shiro.CustomRealm;

@Controller
public class CleanCacheTest {
	
	@Autowired
	private CustomRealm customRealm;
	
	@RequestMapping("/cleanCache.action")
	public String cleanCache()throws Exception{
		customRealm.clearCached();
		System.out.println("清空緩存...");
		return "refuse";
	}
}

2 SessionManager

輸入圖片說明

applicationContext-shiro.xml配置文件:apache

<!-- 6  sessionManager 會話管理器-->
		<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
			<!-- session的失效時間,單位毫秒 -->
			<property name="globalSessionTimeout" value="60000"/>
			<!-- 刪除失效的session -->
			<property name="deleteInvalidSessions" value="true"/>
		</bean>
<!-- 2  配置安全管理器  securityManager-->
		<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
			<property name="realm" ref="customRealm"></property>
			<!-- 注入緩存管理器 -->
			<property name="cacheManager" ref="cacheManager"></property>
			
			<!-- 配置session管理器(SessionManager) -->
			<property name="sessionManager" ref="sessionManager"></property>
		</bean>
相關文章
相關標籤/搜索