`
xmllong
  • 浏览: 12322 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

struts2中拦截AJAX请求,判断SESSION为空跳转到登录页面

 
阅读更多
struts2中拦截AJAX请求,判断SESSION为空跳转到登录页面
参考http://endual.iteye.com/blog/1620368
首先介绍情况:我们项目用STRUTS2+jquery easyui形式,发现在登录超时后,easyui的datagrid总显示为空(其实后台数据库是有数据的),但是又没有任何提示(我知道可以用类似 暂无数据 这样的方法来处理,但是实际上后台是有数据的,这样提示是不合理不真实的),我想要的是发现登录超时后,直接提示登录超时,然后跳转到登录页面。
方法有二:
方法一:在每个ACTION中进行判断处理,然后页面前台接收,并进行跳转到登录页面处理,缺点:每个类和前台每个页面都要写代码,麻烦
后台action处理:
BtUser user=getSessionUser("loginUser");
if(null==user){
    String errStr="{\"msgtitle\":\"登录超时\",\"msgtype\":\"error\",\"msginfo\":\"登录超时请重新登录!\",\"msgsta\":2,\"total\":0,\"rows\":[]}";
    System.out.println(errStr);
    printJsonStr(errStr);
 }else{
   正常业务处理
 }
 然后在前台页面上,在datagrid的onLoadSuccess事件中进行处理,片断如下
onLoadSuccess:function(data){
  var result = eval(data);
  if(result.total==0 && result.msgType=="error"){
     $.messager.alert(result.msgTitle,result.msgInfo,result.msgType);
     top.location.href="user_login.jsp";
   }
},
方法二:利用struts2的拦截器进行处理,
public class LoginCheckInterceptor extends MethodFilterInterceptor {
/**
 * 是否为AJAX请求
 */
public boolean isAjaxRequest(HttpServletRequest request) {
String header = request.getHeader("X-Requested-With");
if (header != null && "XMLHttpRequest".equals(header))
    return true;
else
    return false;
}

protected String doIntercept(ActionInvocation ai) throws Exception {
 HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response=ServletActionContext.getResponse();
 bean= (BtUser)ServletActionContext.getRequest().getSession().getAttribute("loginUser"); 
         //验证是否已经登录 
 if (null==bean){//尚未登录,跳转至登录页面
  if(isAjaxRequest(request)){
   response.sendError(408);//request timeout
    return "tologin";
  }else{
   return "tologin";
  }
 }else{
    return ai.invoke();
  }
}
}
然后前台怎么处理呢,利用AJAX的全局事件,因为我把所有的常用JS,CSS都放在inc_right.jsp中了,所以为了省事我还放在这里面
<%
String bp = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%>
<script>
var glb_bp='<%=bp%>';
</script>
<script src="<%=currPath %>/jslib/global_session.js"></script>
global_session.js
 //从jQuery1.8开始,.ajaxError()方法应该只被附加到document上
  $(document).ajaxError(function(event,jqxhr,settings,exception){
    if(jqxhr.status==408){
     alert("操作超时,请重新登录!");
     top.location =glb_bp+ "user_login.jsp";
    }
  });
  完美了,原来做好的页面不用做任何修改就可以。当然如果你的页面比较少,也可以将上面的代码直接放在
  $(function(){
   //从jQuery1.8开始,.ajaxError()方法应该只被附加到document上
  $(document).ajaxError(function(event,jqxhr,settings,exception){
   if(jqxhr.status){
    alert("操作超时,请重新登录!");
    alert(glb_bp);
    top.location =glb_bp+ "user_login.jsp";
   }else if(jqxhr.status==403){
     alert("没有权限!");
    window.location = "common/nopermit.html";
   }else if(jqxhr.status==500){
    alert("发生错误!");
    window.location = "common/error.html";
   }
  }
分享到:
评论

相关推荐

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

    然而,在使用Ajax技术进行异步请求时,会遇到一个问题,即如何在Session失效的情况下处理请求并跳转到登录页面。本文主要针对该问题提供了详细的解决方案,并以Struts2框架为例,讲解了如何通过拦截器来实现这一功能...

    Struts2内置拦截器简介

    ### Struts2内置拦截器简介 #### 一、概述 Struts2框架是Apache软件基金会下的一个开源项目,它提供了一种基于MVC(Model-View-Controller)设计模式的Web应用开发框架。Struts2的核心是拦截器(Interceptor)机制...

    ajax请求Session失效问题

    因此,我们可以在服务器端的拦截器(如Struts2的Interceptor)中检查这个字段,以此来区分AJAX请求和普通请求。 以下是一个简单的示例,展示了如何在Struts2拦截器中处理这个问题: ```java public String ...

    Struts2+Hibernate+MySQL实现登录

    在Struts2中,Action类是业务逻辑的核心,处理用户请求,并与模型进行交互。Struts2的配置文件(struts.xml)定义了Action类与URL之间的映射关系,以及Action执行后的结果页面跳转。此外,Struts2提供了Interceptor...

    struts2聊天室

    例如,创建一个`AuthenticationInterceptor`,在每次请求前检查用户是否已登录,未登录则跳转到登录页面。 4. **Session管理**:登录成功后,用户的登录信息(如用户ID)通常会被存入Session,以便后续请求能识别...

    struts2登录实例

    - **Action类**:在Struts2中,Action类是业务逻辑处理的主要载体,负责接收请求并执行相应的操作。 - **Result**:Action执行后会返回一个Result,Result决定了页面跳转的方向,如重定向或转发到某个JSP页面。 -...

    java Struts2中文学习文档

    Struts2是Java Web开发中的一个强大框架,它在MVC(Model-View-Controller)设计模式的基础上,为开发者提供了一种高效、灵活且可扩展的解决方案。本篇文档将深入探讨Struts2的核心概念、架构以及实际应用,旨在帮助...

    Struts2做的用户的登录

    验证成功后,Action返回一个表示成功的结果类型,这通常会重定向或转发到登录成功的页面。 3. **Session存储用户信息**: 在用户登录验证成功后,为了在用户会话期间保持登录状态,开发者会将用户信息保存在...

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)---chapter2

    在Chapter2中,你将学习到如何配置Struts2框架,创建Action类来处理HTTP请求,以及使用Struts2提供的结果类型(Result)和拦截器(Interceptor)来实现业务逻辑和页面跳转。 **Hibernate** 是一个对象关系映射(ORM...

    Struts2+Hibernate实现文件上传

    这可以通过Struts2的结果类型来实现,例如跳转到一个显示成功信息的JSP页面。 至于标签“图片上传”,这可能指的是在前端展示已上传的图片。在HTML页面中,可以使用`&lt;img&gt;`标签配合URL来显示图片。如果图片路径存储...

    Struts2 简易文档

    1. **Action类**:Struts2中的每个业务逻辑都封装在一个Action类中。Action类负责接收用户的请求,执行相应的业务逻辑,并返回一个Result,指示视图如何展示。在登录场景中,Action类会验证用户名和密码,如果验证...

    Struts2.0中文教程

    此外,OGNL(Object-Graph Navigation Language)是Struts2中的表达式语言,用于在Action和视图之间传递数据。 在处理表单数据时,Struts2提供了强大的数据绑定功能。你可以直接将表单字段与Action的属性进行映射,...

    struts2+hibernate 简单网上书店

    在我们的网上书店系统中,Struts2负责处理用户请求,调度业务逻辑,并将结果渲染到视图层。通过配置Action类和struts.xml配置文件,我们可以实现URL映射,控制页面跳转,以及处理表单数据。 其次,Hibernate是Java...

    研磨Struts2

    Result是Struts2中定义Action执行结果的组件,它决定了Action执行完毕后页面如何跳转。 #### 4.2 Result类型 Struts2提供了多种类型的Result,如dispatcher、redirect、chain等,每种类型都有其特定的应用场景。 ...

    struts2写的用户管理

    - **Action类**:Struts2中的核心组件,负责处理用户请求,执行业务逻辑,并将结果返回给视图。 - **配置文件**:通常为struts.xml,用于定义Action及其映射路径,结果类型等。 - **拦截器(Interceptor)**:...

    Struts2实例代码

    1. **Action类**:在Struts2中,Action类是处理用户请求的核心组件。每个Action类代表一个业务逻辑操作,通常会有一个与之对应的URL。Action类需要实现`com.opensymphony.xwork2.Action`接口或者继承`org.struts2....

    完美解决ajax访问遇到Session失效的问题

    客户端的JavaScript代码可以监听这个响应,然后根据返回的数据执行相应的操作,比如弹出提示框告知用户Session已过期,并自动跳转到登录页面。 客户端的JavaScript代码示例: ```javascript $.ajax({ url: 'your-...

    struts+hibernate登陆注册实例

    2. Struts2 拦截器检查请求,可能进行登录前的预处理,如CSRF防护。 3. 请求被映射到对应的Action,Action 类中包含了登录逻辑,如验证用户名和密码。 4. 使用Hibernate的Session接口,查询数据库中是否存在匹配的...

Global site tag (gtag.js) - Google Analytics