HttpSessionListener接口监听Session的创建和失效
spring 使用 shiro 后,由于shiro重新封装了原有的session,所以不能再使用原来的session监听方法了
- 配置监听类
<!-- Shiro's main business-tier object for web-enabled applications -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="shiroDbRealm" />
<property name="cacheManager" ref="shiroEhcacheManager" />
<property name="sessionManager" ref="sessionManager" /> <!-- 配置sessionListener -->
</bean>
<!-- 自定义session监听器 -->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="sessionListeners" ref="sessionListener1" />
</bean>
<bean id="sessionListener1" class="org.springside.examples.quickstart.service.sessionservice.SessionListener1"></bean>
- 在shiro的配置文件中添加启动监听类的入口
import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionListener;
public class SessionListener1 implements SessionListener {
@Override
public void onStart(Session session) {//会话创建触发 已进入shiro的过滤连就触发这个方法
// TODO Auto-generated method stub
System.out.println("会话创建:" + session.getId());
}
@Override
public void onStop(Session session) {//退出
// TODO Auto-generated method stub
System.out.println("退出会话:" + session.getId());
}
@Override
public void onExpiration(Session session) {//会话过期时触发
// TODO Auto-generated method stub
System.out.println("会话过期:" + session.getId());
}
}
如果只想监听某一个事件,可以继承SessionListenerAdapter实现
public class MySessionListener extends SessionListenerAdapter {
@Override
public void onStart(Session session) {
System.out.println("会话创建:" + session.getId());
}
}