以下是对web.xml中session时间自动失效后的操作,或者,用户主动退出时候也可用此方法。
package org.springside.modules.web.struts2; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import org.springframework.stereotype.Component; import org.springside.modules.utils.ContextUtil; import com.ictrep.base.entity.onlines.OnlineInfo; import com.ictrep.base.entity.onlines.OnlineOutLog; import com.ictrep.base.service.onlines.OnlineInfoManager; import com.ictrep.base.service.onlines.OnlineOutLogManager; import com.ictrep.base.web.base.onlines.OnlineinfoAction; import com.ictrep.base.web.base.onlines.OnlineoutlogAction; /** * Application Lifecycle Listener implementation class CountSessionListener * @author Lnw * @date 2012-06-15 */ //,HttpSessionAttributeListener,HttpSessionActivationListener,HttpSessionBindingListener @Component public class CountSessionListener implements HttpSessionListener{ /*@Autowired private OnlineInfoManager onlineinfoManager;*/ //onlineinfoManager /** * Default constructor. */ public CountSessionListener() { System.out.println("启动了。。。。。。"); } /* public static ServletContext getServletContext() { // WebContext wc = WebContextFactory.get(); // if (wc != null) { // return wc.getServletContext(); // } else //{ ServletContext context = ContextUtil.get(Constant.SERVLET_CONTEXT, ServletContext.class); if (context != null) { return context; } //} //logger.warn("此方法只能在Web服务器环境下使用."); return null; } public static ApplicationContext getWebApplicationContext() { ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext()); return ctx; }*/ /** * @正常退出系统时 * @与非正常退出时 * 都走此方法attributeRemoved() * 但是要分情况 */ // user exit //private List<OnlineInfo> m_info=new ArrayList<OnlineInfo>(); public void sessionDestroyed(HttpSessionEvent system_exitEvent) { String userid=((String)system_exitEvent.getSession().getAttribute("userId_date")).split("_")[0]; OnlineInfo info=(OnlineInfo)system_exitEvent.getSession().getAttribute("onlineinfo"); //m_info.add(info); OnlineOutLog outlog=new OnlineOutLog(); //如果数据库中有id为这个的对象 就去 删除 SYSTEM_ONLINE表中当前退出用户 id的记录 System.out.println("监听器: "+info.getUser().getUsername()); //if(onlineinfoManager.getOlineInfoById(info.getId()).size()>0){ if(userid.equals(String.valueOf(info.getUser().getId()))){ outlog.setUser(info.getUser()); outlog.setDepartment(info.getDepartment()); outlog.setLogindate(info.getLogindate()); outlog.setLastvisitdate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); outlog.setSessionid(info.getSessionid()); outlog.setIpaddress(info.getIpaddress()); outlog.setSyscode(info.getSyscode()); } //} try{ OnlineInfoManager onlineinfoManager= ContextUtil.getBean("onlineinfoManager", OnlineInfoManager.class); //拿到login manager OnlineOutLogManager online_OutManager= ContextUtil.getBean("onlineoutlogManager", OnlineOutLogManager.class); //拿到out manager online_OutManager.save(outlog); //保存日志记录 onlineinfoManager.removeObject(info.getId()); //删除登录记录 }catch (Exception e) { //System.out.println("异常:"+info.getUser().getUsername()); //e.printStackTrace(); System.out.println(e.getMessage()); //m_info.clear(); } } public void sessionCreated(HttpSessionEvent arg0) { // TODO Auto-generated method stub } public void attributeAdded(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub } public void attributeReplaced(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub } public void sessionDidActivate(HttpSessionEvent arg0) { // TODO Auto-generated method stub } public void sessionWillPassivate(HttpSessionEvent arg0) { // TODO Auto-generated method stub } public void valueBound(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub } public void valueUnbound(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub } }