2019独角兽企业重金招聘Python工程师标准>>>

项目需要做一个自动登出的功能,查询了网上的资料,一开始准备用session监听做,按照下面方式配置监听器

1.在项目的web.xml文件中添加如下代码:

?
1
2
3
4
<!--添加Session监听器-->
<listener>
<listener-class> 监听器路径 </listener-class>
</listener>

2.编写java类。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class SessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent arg0) {
// session创建时执行  SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
String nowtimes = simpleFormat.format(new Date());
User u=null;
//System.out.println("执行。。 当前时间:"+nowtimes+"_"+u);  HttpSession ses= arg0.getSession();
String id=ses.getId()+"_"+ses.getCreationTime();
}
public void sessionDestroyed(HttpSessionEvent arg0) {
// session失效时执行  SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
String nowtimes = simpleFormat.format(new Date()); 
//System.out.println("session失效了。。 结束时间: "+nowtimes); }
}

配置完成后等session失效后成功进入sessionDestroyed方法,准备进行页面跳转操作,突然发现怎么写跳转,愣住了,继续上网请教大神,发现这个监听是做一些后台统计处理的,无法实现页面跳转的功能。

只能放弃这方法了,开始使用过滤器实现

1、web.xml中添加过滤器配置

?
1
2
3
4
5
6
7
8
<filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.orchestrall.web.helper.session.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/actions/*</url-pattern>
</filter-mapping>

2、新建SessionFilter类,实现Filter接口。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class SessionFilterimplements Filter {
public void destroy() {
// TODO Auto-generated method stub    }
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpSession session = httpRequest.getSession();
// 登陆url        String loginUrl = httpRequest.getContextPath() + "/admin/login.jsp";
String url = httpRequest.getRequestURI();
String path = url.substring(url.lastIndexOf("/"));
// 超时处理,ajax请求超时设置超时状态,页面请求超时则返回提示并重定向        if (path.indexOf(".action") != -1
&& session.getAttribute("LOGIN_SUCCESS") == null) {
// 判断是否为ajax请求            if (httpRequest.getHeader("x-requested-with") != null
&& httpRequest.getHeader("x-requested-with")
.equalsIgnoreCase("XMLHttpRequest")) {
httpResponse.addHeader("sessionstatus", "timeOut");
httpResponse.addHeader("loginPath", loginUrl);
chain.doFilter(request, response);// 不可少,否则请求会出错            } else {
String str = "<script language='javascript'>alert('会话过期,请重新登录');"
+ "window.top.location.href='"
+ loginUrl
+ "';</script>";
response.setContentType("text/html;charset=UTF-8");// 解决中文乱码                try {
PrintWriter writer = response.getWriter();
writer.write(str);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub    }
}

3、客户端JS,用于ajax请求session超时

对于jquery

?
1
2
3
4
5
6
7
8
9
10
11
12
<script type="text/javascript">
$(document).ajaxComplete(function(event, xhr, settings) {  
if(xhr.getResponseHeader("sessionstatus")=="timeOut"){  
if(xhr.getResponseHeader("loginPath")){
alert("会话过期,请重新登陆!");
window.location.replace(xhr.getResponseHeader("loginPath"));  
}else{  
alert("请求超时请重新登陆 !");  
}  
}  
});  
</script>

对于extjs的ajax请求

?
1
2
3
4
5
6
7
8
9
10
11
Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);
function checkUserSessionStatus(conn,response,options){
if(response.getResponseHeader("sessionstatus") == 'timeout'){
if(response.getResponseHeader("loginPath")){
alert("会话过期,请重新登陆!");
window.top.location.href = response.getResponseHeader("loginPath");
}else{
alert("请求超时请重新登陆 !");
}
}
}

如果使某个ajax请求不受全局方法的影响,那么可以在使用$.ajax()方法时,将参数中的global设置为false,jquery代码如下:

?
1
2
3
4
$.ajax({
url:"test.html",
global:false//不触发全局ajax事件})

转载于:https://my.oschina.net/u/1034537/blog/357350

session过期跳转登录页面相关推荐

  1. Ajax Session失效跳转登录页面的方法

    在Struts应用中,我们发出的请求都会经过 相应的拦截器进行相关处理,一般都会有一个用户登录拦截(Session失效拦截):一般请求的话,如果Session失效时,我们会跳到登录页面,可是如果我们采 ...

  2. react axios和ajax网络请求拦截(session过期跳转登录页)

    网络请求拦截经常也可用到,比如在所有接口消息请求头部加上验证信息token之类的,或者接口报某类错误时统一处理.这里主要用在请求接口时,判断session是否过期,统一返回状态码区分,如果过期了跳转登 ...

  3. session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面

    1.方法一 :1.1使用filter 和ajaxsetup 对ajax进行拦截并跳转登录页面 public void doFilter(ServletRequest request, ServletR ...

  4. Shiro session过期跳转到登录页面问题

    Shiro session过期跳转到登录页面问题 shrio的session过期后(工程重启或者用户长时间没进行任何操作),当客户端再次向服务端发起请求时,shrio会判断用户没有登录授权,然后对请求 ...

  5. ajaxsetup获取ajax的url_ajaxsetup,组合拦截器处理session过期,跳转登录页面

    当前位置:我的异常网» Ajax » ajaxsetup,组合拦截器处理session过期,跳转登录页面 ajaxsetup,组合拦截器处理session过期,跳转登录页面 www.myexcepti ...

  6. 当session失效后,无论点击那个页面,都找到顶端页面,跳到登录页面。

    当session失效后,用户点击当前页面会跳到登录页面,如果用户现在是在子页面,则当前的子页面跳到登录,用户感觉很不好,所以进行处理,例得无论点击那个页面,都找到顶端页面,再跳到登录页面. 处理的方式 ...

  7. java session失效之后跳转_详解springmvc控制登录用户session失效后跳转登录页面

    springmvc控制登录用户session失效后跳转登录页面,废话不多少了,具体如下: 第一步,配置 web.xml 15 第二步,配置spring-mvc.xml 第三步,写拦截器SystemSe ...

  8. dwz ajax session超时跳转登录页(struts2自定义拦截器)

    1.定义struts2拦截器(网上例子很多) 代码如下: package rt.intercepter;import java.util.Map;import javax.servlet.http.H ...

  9. 记一次IIS发布网站导致系统时常跳入登录页面的问题解决

    服务器:winserver2012R2 iis 发布网站后,正常浏览网页,时常跳到登录页面,第一反应session过期,因为登录信息都存在session,但session 都是默认配置过期时间为20分 ...

最新文章

  1. “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法
  2. 【ACM】杭电OJ 5055(Bob and math problem)
  3. ohmyzsh用在mysql_oh-my-zsh,让你的终端从未这么爽过
  4. squid 的配置详解 (转)--SeriesI 收藏
  5. 通俗易懂:贪心算法(一):分配问题 (力扣455分发饼干 和135分发糖果)
  6. eureka服务续约机制
  7. Windows编程之网络之邮件槽通讯
  8. 团队作业3——需求改进系统设计
  9. 微信公众平台新增语义理解接口
  10. [转]JAVA 在main中访问内部类、方法等
  11. 打开android studio项目,为什么我们没有一个文件来打开Android Studio项目?
  12. JS 父子(弹出)窗口操作总结
  13. 《大道至简》的幕后故事(2):“愚公移山记”人物篇
  14. 32. My Experiences in the Factories 我在工厂的经历
  15. 最为奇怪的程序语言的特性
  16. 网络安全以及常见的网络攻击
  17. 如何“加密”你的email地址
  18. FreeTextBox的使用方法
  19. 小程序生命周期钩子函数
  20. activemq下载安装(windows版)与实例创建,JMS模型介绍

热门文章

  1. java/javaee基础面试问题
  2. [JZOJ5281]钦点题解--瞎搞+链表
  3. 一个略复杂的数据映射聚合例子及代码重构
  4. [MYSQL] 如何彻底卸载MYSQL5.x
  5. String 类型的相关转换
  6. ASP.NET2.0 - ASP.net MVC和ASP.net Web Forms
  7. 不同国别的买家,谈判方式竟有如此大差异!
  8. 规划搜索产品时,我们可以如何着手?
  9. 拒绝不靠谱的需求:怎样确定需求才是正确的?
  10. 【产品干货】一个App的从无到有