1. 程式人生 > >shiro session 監聽

shiro session 監聽

spring 使用 shiro 後,由於shiro重新封裝了原有的session,所以不能再使用原來的session監聽方法了

(1)在shiro配額只檔案中設定監聽類

	<!-- shiroSessionListener  監聽類-->
	<bean id="shiroSessionListener" class="com.listener.ShiroSessionListener"></bean>
	
	<!-- 自定義會話管理配置 -->
	<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> 
		<property name="sessionDAO" ref="sessionDAO"/>
		
		<!-- 會話超時時間,單位:毫秒  -->
		<property name="globalSessionTimeout" value="${session.sessionTimeout}"/>
		 <property name ="sessionListeners"> 
                <list> 
                   <ref bean="shiroSessionListener"/>
                </list>  
             </property>
<!-- 定時清理失效會話, 清理使用者直接關閉瀏覽器造成的孤立會話 --> <property name="sessionValidationInterval" value="${session.sessionTimeoutClean}"/> <!-- <property name="sessionValidationSchedulerEnabled" value="false"/> --> <property name="sessionValidationSchedulerEnabled" value="true"/> <property name="sessionIdCookie" ref="sessionIdCookie"/> <property name="sessionIdCookieEnabled" value="true"/> </bean>

(2)監聽類
import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionListenerAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class ShiroSessionListener extends SessionListenerAdapter {
	Logger logger=LoggerFactory.getLogger(ShiroSessionListener.class);
	 @Override  
	    public void onStart(Session session) {//會話建立時觸發  
	        logger.debug("會話建立:" + session.getId());  

	    }  
	    @Override  
	    public void onExpiration(Session session) {//會話過期時觸發  
	    	logger.debug("會話過期:" + session.getId());  
	    	
	    }  
	    @Override  
	    public void onStop(Session session) {//退出時觸發  
	    	logger.info("會話停止:" + session.getId());  
	    }    
}