SessionDAO的作用是为Session提供CRUD并进行持久化的一个shiro组件,将集成redis缓存进行开发
由配置文件可以知道sessionManager需要注入一个sessionDao
<!-- 自定义会话管理配置 -->
<bean id="sessionManager" class="com.dq.shiro.security.SessionManager">
<property name="sessionDAO" ref="sessionDAO"/>
<!-- 配置会话监听器 -->
<property name="sessionListeners" ref="mySessionListener" />
<!-- 会话超时时间,单位:毫秒 -->
<property name="globalSessionTimeout" value="${session.sessionTimeout}"/>
<!-- 定时清理失效会话, 清理用户直接关闭浏览器造成的孤立会话 -->
<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>
自定义的SessionManager的继承关系为
SessionManager extends DefaultWebSessionManager
DefaultWebSessionManager extends DefaultSessionManager
我们能够在DefaultSessionManager中发现我们注入的SessionDAO
public class DefaultSessionManager extends AbstractValidatingSessionManager implements CacheManagerAware {
//TODO - complete JavaDoc
private static final Logger log = LoggerFactory.getLogger(DefaultSessionManager.class);
private SessionFactory sessionFactory;
protected SessionDAO sessionDAO; //todo - move SessionDAO up to AbstractValidatingSessionManager?
DefaultSessionManager所有对session的crud的操作都是由sessi