本文主要是介绍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>
<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()); }
}
这篇关于shiro session 监听的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!