Bootstrap

shiro中如何检测session失效、退出等事件

shiro中如何检测session失效、退出等事件

前言

我们知道shiro是一个优秀的web权限管理的优秀框架,shiro中实现了对用户登录、资源访问控制等功能,使用shiro能够让我们的应用web系统更加安全,同时降低了自己开发一套权限管理系统的代价;本篇文章想向读者介绍的是我们如何在使用shiro框架时,实现对用户session登录、登出等事件的监听,以便应用系统更好的实现对用户事件的管理。

一、shiro中的session是什么?

首先我们要明确shiro中的session和传统的httpSession不是一个东西,shiro中的session是shiro框架自己实现的一个用户会话管理器,做到和httpSession一样存储登录用户信息,用户登出后清除等功能。
如果在shiro框架中实现对session的管理和控制,需要我们自己实现sessioinManager,即session会话管理类,本文引用的是shiro框架中包含的一个基础的会话管理功能作介绍,抛砖引玉,读者可以根据它的使用方式定义更多功能自己的实现类。

二、使用代码

1.自定义sessionManager

@Bean
    public SessionManager memeryManager(
            @Qualifier(value = "memoryCacha")
            CacheManager cacheManager) {
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        sessionManager.setSessionDAO(new MemorySessionDAO());
        sessionManager.setCacheManager(cacheManager);
        // 局会话超时时间(单位毫秒),默认30分钟
        sessionManager.setGlobalSessionTimeout(sessionTimeOut * 1000);
        sessionManager.setSessionValidationInterval(sessionTimeOut * 1000);
        // 取消登录成功后url 后面的 JSESSIONID
        sessionManager.setSessionIdUrlRewritingEnabled(false);
        // 删除过期的session
        sessionManager.setDeleteInvalidSessions(true);
        // 定时检测session过期,10s检测一次
        sessionManager.setSessionValidationSchedulerEnabled(true);
        ExecutorServiceSessionValidationScheduler validationScheduler = new ExecutorServiceSessionValidationScheduler(
                sessionManager);
        validationScheduler.setInterval(sessionInterval);
        sessionManager.setSessionValidationScheduler(validationScheduler);
        sessionManager.setSessionListeners(Collections.singleton(listener));
        return sessionManager;
    }

2.代码运行效果

在这里插入图片描述

总结

如下我们就实现了对shiro的session进行活动监控,这样我们可以实现用户自动登出、登出后的相关信息清除。可通过
shiroFilterFactoryBean.getFilters().put("authc", new BaseFormAuthenticationFilter()); 控制session失效后页面跳转地址或做其他的pv/uv统计操作。

;