首先是配置过滤器filter的步骤:
在web.xml里面配置一个SessionTimeoutFilter,过滤一切以.htm结尾的url请求。配置如下:
sessionmanager
com.xx.common.SessionTimoutFilter
sessionmanager
*.htm
然后就是过滤器的核心方法,原理就是在session里面设置一个lastAccessTime变量,保存上次访问的毫秒值,然后每次用
当前时间的毫秒值 -- 上次访问毫秒值,如果大于设置的session时长,则表示过期了:
public void dofilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
//判断是否超过规定时间没有访问
long SESSION_TIMEOUT = 30*60*1000L;//session保存时长为30分钟,单位毫秒
if (SESSION_TIMEOUT >= 1L) {
HttpSession session = request.getSession();
//获取当前时间
long crrentTime = System.currentTimeMillis();
//上次访问时间
Object obj = session.getAttribute("lastAccesTime");
long lastAccesTime = (obj == null ? crrentTime : ((Long) obj).longValue());
if (crrentTime - lastAccesTime <= SESSION_TIMEOUT) {//当前时间减去上次访问的时间,大于在线时长,则表示session过期了
// nosession 参数用在定时刷新请求上,不记录上次访问时间
session.setAttribute("lastAccesTime", crrentTime);
} else {
session.invalidate();
}
}
}