1、web.xml 添加配置:

    <!-- session超时 -->
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.dayhro.platform.filter.SessionTimeoutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2、sessionfilter.properties

#***********************************
# sessionouttimefilter配置
#***********************************
#判断以下的数据,拦截器直接跳过;以逗号分隔;
allowUrls=login.do,login.jsp,logout.do,404.html,500.html,getSmsCode.do,codeCallBack.do,error.jsp
#判断以下后缀名,也直接跳过;以逗号分隔;
suffix=js,css,jpg,jpeg,ico,png,zip,swf,xml,gif,ftl,php,apk,ipa,rar,mp3,wav,rmvb,doc,xls,ppt,woff,ttf
hippsuffix=/sso/to_hippo.jsp
#移动端请求放行
mobilesuffix=/mobile/
#WEBSERVICE请求放行
webservicesuffix=/webws/
#客户指引请求放行
guidancesuffix=/guidance/
#与外包会话保持线程,每十分钟一次
#baseUrl=http://localhost:80
chinese=\u4E2D\u6587

3、SessionTimeoutFilter:

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; import com.dayhr.web.util.PropertiesCommonUtil;
import com.dayhr.web.util.StringUtil; /**
*
* @ClassName:SessionTimeoutFilter
* @Description: session超时处理
* @author:
* @date:2016年9月19日 下午7:59:25
* @version
*/
public class SessionTimeoutFilter implements Filter { private Map<String, String> map = new HashMap<String, String>();
private Map<String, String> suffixmap = new HashMap<String, String>();
private static String loginUrl; static{
loginUrl = PropertiesCommonUtil.getValue("/properties/orgServer.properties", "login.url");
} @Override
public void destroy() { } /**
* 监听
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request;
HttpServletResponse httpResponse = (HttpServletResponse)response; String contextPath=httpRequest.getContextPath();
String requestUrl=httpRequest.getRequestURI().replace(contextPath, ""); if(requestUrl.indexOf(";")>-1){
requestUrl = requestUrl.substring(0, requestUrl.indexOf(";")); //获取分号之前的字符串
} //当遇到不须过滤的直接跳过
if(/*"/".equals(requestUrl)||*/requestUrl.contains("//")
|| map.get(StringUtil.parseSuffix(requestUrl,"url"))!=null
|| suffixmap.get(StringUtil.parseSuffix(requestUrl,"suffix"))!=null)
{
//可以跳过
chain.doFilter(request, response);
return ;
} HttpSession httpSession = httpRequest.getSession();
if(httpSession == null || httpSession.getAttribute("userInfo") == null){
//String userAgent = httpRequest.getHeader("User-Agent");
String ajax = httpRequest.getHeader("X-Requested-With"); //XMLHttpRequest为ajax请求 if(StringUtils.isNotBlank(ajax)){ // ajax请求
httpResponse.setHeader("sessionstatus", "timeout");
//httpRequest.getRequestDispatcher("/user/sessionTimeoutWeb").forward(httpRequest, httpResponse);
} else {
if("/index.jsp".equals(requestUrl)){
httpRequest.getRequestDispatcher("/index.jsp").forward(httpRequest, httpResponse);
}else{
httpResponse.sendRedirect(loginUrl+"/logout?source=dayHRO");
}
}
}else{
chain.doFilter(httpRequest, httpResponse);
}
} /**
* 初始化操作
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException { //获取过滤不用进行拦截的URL
Properties properties = PropertiesCommonUtil.readPropertiesFile("/properties/sessionfilter.properties");
String allowUrls = properties.getProperty("allowUrls");
String suffixs = properties.getProperty("suffix"); if (allowUrls != null) {
String[] st = allowUrls.split(",");
map.clear();
for (String s : st) {
map.put(s, s);
}
}
if (suffixs != null) {
String[] str = suffixs.split(",");
suffixmap.clear();
for (String s : str) {
suffixmap.put(s, s);
}
}
} }

4、jsp页面:

//session失效登出
$.ajaxSetup({
contentType: "application/x-www-form-urlencoded;charset=utf-8"
,complete: function (XMLHttpRequest, textStatus) {
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); // 通过XMLHttpRequest取得响应头,sessionstatus,
if (sessionstatus == "timeout") {
// 如果超时就处理 ,指定要跳转的页面
window.location.href = "/dayhro-web/DayhroLogin/logout";
}
}
});

Session超时处理的更多相关文章

  1. Java设置session超时(失效)的三种方式

    1. 在web容器中设置(此处以tomcat为例) 在tomcat-6.0\conf\web.xml中设置,以下是tomcat 6.0中的默认配置: <!-- ================= ...

  2. session超时时间设置方法

    session超时时间设置方法 由于session值之前没有设置,以至于刚登录的网站,不到一分钟就超时了,总结了一下,原来是session过期的原因,以下是设置session时间的3个方法: 1. 在 ...

  3. ASP.NET多次点击提交按钮以及Session超时和丢失过期问题

    1.ASP.NET防止多次点击提交按钮 对于一个按钮,要让变成恢色的,只要this.disabled=true就可以了,可是在.NET里,添加了OnClick事件后,就无法提交信息了.所以要加上以下代 ...

  4. Spring mvc Interceptor 解决Session超时配置流程

    最近公司内部框架中对Session超时这一功能未实现,由于采用iframe结构,Session超时后,当点击左侧系统菜单时,会在iframe的右侧再次弹出登陆框. 该问题是由于没有设置拦截器造成. 添 ...

  5. c# webConfig中的session超时详细设置

    webConfig中的session超时详细设置 我们在webConfig中设置Session超时的时候,如果最后发行的地址是远程服务器,我们很多不是必须的属性并不用设置,如果设之后,倒不能让 ses ...

  6. 设置session超时

    在web应用中,设置session超时有三种方法: 1.在web.xml文件中配置:单位是分钟,范围是针对本项目所有用户的session <session-config> <sess ...

  7. spring security:ajax请求的session超时处理

    当前端在用ajax请求时,如果没有设置session超时时间并且做跳转到登录界面的处理,那么只是靠后台是很难完成超时的一系列动作的:但是如果后台 没有封装一个ajax请求公共类,那么在ajax请求上下 ...

  8. 配置SESSION超时与请求超时

    <!--项目的web.xml中 配置SESSION超时,单位是min.用户在线时间.如果不设置,tomcat下的web.xml的session-timeout为默认.--><sess ...

  9. Java设置session超时(失效)的时间

    在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session具体设置的方法有三种:1.在web容器中设置(以tomcat为例)在tom ...

随机推荐

  1. 信息安全系统设计基础实验一:Linux开发环境的配置和使用(20135234,20135229)

    http://www.cnblogs.com/mqy123/p/4968386.html

  2. 第一周Web类WriteUp

    Forms 看到这题目第一反应就是先抓个包试试,抓包之后效果如图所示 看到一个showsource=0,那就想着把它改成1看看会出现什么效果,改成1之后forward,发现网页上变成了这个样子 根据这 ...

  3. 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现

    引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之 ...

  4. js的深度拷贝和浅拷贝

    从extend看浅拷贝和深拷贝 请先查看: http://blog.sina.com.cn/s/blog_912389e5010120n2.html

  5. c#取得控制台应用程序根目录

    1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.Bas ...

  6. margin的理解

    1.盒子模型 在进行网页设计的时候,我们使用的是盒子模型,其内容如下: 整个网页就是大盒子套小盒子,小盒子又套更小的盒子来实现的.但是在做网页设计时总是搞不清margin和padding的使用方式,在 ...

  7. 第三章:javascript: 列表

    在日常生活中,人们经常使用列表:待办事项列表,购物清单,十佳榜单,最后十名榜单等.计算机也在使用列表,尤其是列表中元素保存的是太多时.当不需要一个很长的序列中查找元素,或对其进行排序时,列表显得尤为有 ...

  8. Windows7下出现“不支持此接口”的解决方案

    今天学校里的辅导员突然找到我说Windows 7下什么文件夹都打不开了,提示“不支持此接口”.怀疑是病毒所致,但运行杀毒软件没有结果.重启也问题依旧. 上网查了之后找到了修复方法: 在命令行中输入fo ...

  9. tomcat 简介

    一,Tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项 ...

  10. 详解在visual studio中使用git版本系统(图文)

    很多人已经在使用git(或正在转移到git上),在github.com上,也看到园子里不少同学的开源项目,非常不错.但相关教程似乎不多,所以趁着我自己的开源项目源码托管(https://github. ...