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失效的情况下处理请求并跳转到登录页面。本文主要针对该问题提供了详细的解决方案,并以Struts2框架为例,讲解了如何通过拦截器来实现这一功能...
### Struts2内置拦截器简介 #### 一、概述 Struts2框架是Apache软件基金会下的一个开源项目,它提供了一种基于MVC(Model-View-Controller)设计模式的Web应用开发框架。Struts2的核心是拦截器(Interceptor)机制...
因此,我们可以在服务器端的拦截器(如Struts2的Interceptor)中检查这个字段,以此来区分AJAX请求和普通请求。 以下是一个简单的示例,展示了如何在Struts2拦截器中处理这个问题: ```java public String ...
在Struts2中,Action类是业务逻辑的核心,处理用户请求,并与模型进行交互。Struts2的配置文件(struts.xml)定义了Action类与URL之间的映射关系,以及Action执行后的结果页面跳转。此外,Struts2提供了Interceptor...
例如,创建一个`AuthenticationInterceptor`,在每次请求前检查用户是否已登录,未登录则跳转到登录页面。 4. **Session管理**:登录成功后,用户的登录信息(如用户ID)通常会被存入Session,以便后续请求能识别...
- **Action类**:在Struts2中,Action类是业务逻辑处理的主要载体,负责接收请求并执行相应的操作。 - **Result**:Action执行后会返回一个Result,Result决定了页面跳转的方向,如重定向或转发到某个JSP页面。 -...
Struts2是Java Web开发中的一个强大框架,它在MVC(Model-View-Controller)设计模式的基础上,为开发者提供了一种高效、灵活且可扩展的解决方案。本篇文档将深入探讨Struts2的核心概念、架构以及实际应用,旨在帮助...
验证成功后,Action返回一个表示成功的结果类型,这通常会重定向或转发到登录成功的页面。 3. **Session存储用户信息**: 在用户登录验证成功后,为了在用户会话期间保持登录状态,开发者会将用户信息保存在...
在Chapter2中,你将学习到如何配置Struts2框架,创建Action类来处理HTTP请求,以及使用Struts2提供的结果类型(Result)和拦截器(Interceptor)来实现业务逻辑和页面跳转。 **Hibernate** 是一个对象关系映射(ORM...
这可以通过Struts2的结果类型来实现,例如跳转到一个显示成功信息的JSP页面。 至于标签“图片上传”,这可能指的是在前端展示已上传的图片。在HTML页面中,可以使用`<img>`标签配合URL来显示图片。如果图片路径存储...
1. **Action类**:Struts2中的每个业务逻辑都封装在一个Action类中。Action类负责接收用户的请求,执行相应的业务逻辑,并返回一个Result,指示视图如何展示。在登录场景中,Action类会验证用户名和密码,如果验证...
此外,OGNL(Object-Graph Navigation Language)是Struts2中的表达式语言,用于在Action和视图之间传递数据。 在处理表单数据时,Struts2提供了强大的数据绑定功能。你可以直接将表单字段与Action的属性进行映射,...
在我们的网上书店系统中,Struts2负责处理用户请求,调度业务逻辑,并将结果渲染到视图层。通过配置Action类和struts.xml配置文件,我们可以实现URL映射,控制页面跳转,以及处理表单数据。 其次,Hibernate是Java...
Result是Struts2中定义Action执行结果的组件,它决定了Action执行完毕后页面如何跳转。 #### 4.2 Result类型 Struts2提供了多种类型的Result,如dispatcher、redirect、chain等,每种类型都有其特定的应用场景。 ...
- **Action类**:Struts2中的核心组件,负责处理用户请求,执行业务逻辑,并将结果返回给视图。 - **配置文件**:通常为struts.xml,用于定义Action及其映射路径,结果类型等。 - **拦截器(Interceptor)**:...
1. **Action类**:在Struts2中,Action类是处理用户请求的核心组件。每个Action类代表一个业务逻辑操作,通常会有一个与之对应的URL。Action类需要实现`com.opensymphony.xwork2.Action`接口或者继承`org.struts2....
客户端的JavaScript代码可以监听这个响应,然后根据返回的数据执行相应的操作,比如弹出提示框告知用户Session已过期,并自动跳转到登录页面。 客户端的JavaScript代码示例: ```javascript $.ajax({ url: 'your-...
2. Struts2 拦截器检查请求,可能进行登录前的预处理,如CSRF防护。 3. 请求被映射到对应的Action,Action 类中包含了登录逻辑,如验证用户名和密码。 4. 使用Hibernate的Session接口,查询数据库中是否存在匹配的...