目录
一、会话管理
1)为什么要用shiro会话
Shiro的会话管理具备tomcat的会话管理的一起功能;
想较于tomcat的session,shiro提供了对于分布式session的管理
2)shiro会话和tomcat会话的区别
tomcat:
shiro:
tomcat第一次访问会将用户存在于session中,再一次访问的时候还是会在同一个界面,然而shiro第一次访问的时候会将用户信息存在于公共区域,也就是缓存区,第二次访问的时候不一定是之前的页面,所以第二次shiro会去缓存区拿指
3)实现步骤
①、实现SessionListene的监听器
package com.mgy.ssm.shiro;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionListener;
/**
* @author 云鹤衫
* @site www.yunheshan.com
* @company xxx公司
* @create 2022-08-29 8:45
*/
public class MySessionListener implements SessionListener {
@Override
public void onStart(Session session) {
System.out.println("SessionListener.onStart 执行..."+session.getId());
}
@Override
public void onStop(Session session) {
System.out.println("SessionListener.onStop 执行..."+session.getId());
}
@Override
public void onExpiration(Session session) {
System.out.println("SessionListener.onExpiration 执行..."+session.getId());
}
}
②、添加Spering-shiro的配置
<!--注册安全管理器-->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="shiroRealm" />
<property name="sessionManager" ref="sessionManager"></property>
</bean>
<!-- Session ID 生成器 -->
<bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator">
</bean>
<!--sessionDao自定义会话管理,针对Session会话进行CRUD操作-->
<bean id="customSessionDao" class="org.apache.shiro.session.mgt.eis.MemorySessionDAO">
<property name="sessionIdGenerator" ref="sessionIdGenerator"/>
</bean>
<!--会话监听器-->
<bean id="shiroSessionListener" class="com.zking.ssm.shiro.ShiroSessionListener"/>
<!--会话cookie模板-->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<!--设置cookie的name-->
<constructor-arg value="shiro.session"/>
<!--设置cookie有效时间-->
<property name="maxAge" value="-1"/>
<!--设置httpOnly-->
<property name="httpOnly" value="true"/>
</bean>
<!--SessionManager会话管理器-->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<!--设置session会话过期时间 毫秒 2分钟=120000-->
<property name="globalSessionTimeout" value="120000"/>
<!--设置sessionDao-->
<property name="sessionDAO" ref="customSessionDao"/>
<!--设置间隔多久检查一次session的有效性 默认1分钟-->