在Struts应用中,我们发出的请求都会经过 相应的拦截器进行相关处理,一般都会有一个用户登录拦截(Session失效拦截);一般请求的话,如果Session失效时,我们会跳到登录页面,可是如果我们采用AJAX请求时,将会返回登录页面的HTML代码,这肯定不是我们想要的,那么我们如何解决呢?请看以下步骤:
一、建立拦截器
Java代码
package com.xxx.planeap.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.xxx.common.contants.ConstantsKey;
import com.xxx.common.contants.SessionKey;
import com.xxx.planeap.domain.User;
import com.xxx.planeap.security.SecurityContextUtil;
/**
*
* @author Goma OMA1989@YEAH.NET
* @version v1.0
* @since 2012-05-31
*
*/
public class SecurityInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
private Logger logger = Logger.getLogger(SecurityInterceptor.class);
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
String className = invocation.getAction().getClass().getName();
String action = className.substring(className.lastIndexOf(".")+1,className.length());
String actionName = invocation.getProxy().getActionName();
String result;
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
String type = request.getHeader("X-Requested-With");
User user = (User) ActionContext.getContext().getSession().get(SessionKey.CURRENT_USER);
if (user == null) {
logger.debug("SECURITY CHECKED: NEED TO LOGIN");
if ("XMLHttpRequest".equalsIgnoreCase(type)) {// AJAX REQUEST PROCESS
response.setHeader("sessionstatus", ConstantsKey.MSG_TIME_OUT);
result = null;
} else {// NORMAL REQUEST PROCESS
result = ActionSupport.LOGIN;
}
} else {
logger.debug("SECURITY CHECKED: USER HAS LOGINED");
SecurityContextUtil.setCurrentUser(user);
boolean hanPerm = SecurityContextUtil.hasPerm(action, actionName);
logger.debug("SECURITY CHECKED: PERMISSION---"+action+"."+actionName+"="+hanPerm);
result = invocation.invoke();
}
return result;
}
}
二、定义全局AJAX请求结束处理方法
Js代码
//全局的AJAX访问,处理AJAX清求时SESSION超时
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
//通过XMLHttpRequest取得响应头,sessionstatus
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus");
if(sessionstatus=="timeout"){
//这里怎么处理在你,这里跳转的登录页面
window.location.replace(PlanEap.getActionURI("login"));
}
}
});
分享到:
相关推荐
然而,当涉及到用户会话(Session)管理时,AJAX请求可能会引发一些特殊的问题,特别是当Session失效时。本文将深入探讨这个主题,并提供解决方案。 Session是Web应用中用于跟踪用户状态的一种机制。它存储在服务器...
然而,在使用Ajax技术进行异步请求时,会遇到一个问题,即如何在Session失效的情况下处理请求并跳转到登录页面。本文主要针对该问题提供了详细的解决方案,并以Struts2框架为例,讲解了如何通过拦截器来实现这一功能...
以下是一个简单的Struts2拦截器示例,用于处理Ajax请求和Session失效的情况: ```java public String intercept(ActionInvocation invocation) throws Exception { ActionContext ac = invocation....
在Struts2的Action中,取出Session中的验证码与用户输入的进行比较,如果匹配则通过验证,否则返回错误信息。 ```java String userCaptcha = actionRequest.getParameter("captcha"); String sessionCaptcha = ...
- 对于Ajax请求,可能需要自定义拦截器或手动处理令牌,因为隐藏字段不会随异步请求发送。 通过以上步骤,Struts1的令牌机制可以有效地防止页面的重复提交,保护业务数据的完整性。然而,随着技术的发展,现代框架...
使用技术:spring+Struts+hibernate+bootstrap+jquery+ajax 源码描述 SSH开发一个前台结算,前台点餐,后台综合信息管理,后厨配菜的完整源码 登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象...
使用技术:spring+Struts+hibernate+bootstrap+jquery+ajax 源码描述 SSH开发一个前台结算,前台点餐,后台综合信息管理,后厨配菜的完整源码 登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象...
若Session失效或丢失,用户将被重定向到登录页面。 2. **增删改查操作** - **添加图书**:用户可以输入新图书的相关信息(如书名、作者、出版社等),这些数据通过HTTP请求发送到服务器,服务器端处理并将其存储到...
同时,会介绍会话的概念,如session对象的创建、设置属性、获取属性和失效,以及如何处理跨页面的数据共享。 5. **第五章:MVC模式与JSP自定义标签** MVC(Model-View-Controller)模式是JavaWeb开发中常用的设计...
用户注销 非正常退出 session失效 三种情况来进行 控制 分别使用了两种方式 进行了实现1:不修改数据库使用HashMap+HttpSessionListener 2:给数据库添加online列 使用(数据库脚本包含在内)HashMap+...
- **拦截器**:处理请求前后的逻辑。 - **Action**:处理业务逻辑。 - **配置文件**:配置拦截器栈、结果类型等。 ##### Struts2中result中的type类型 - **dispatcher**:将请求转发给指定页面。 - **chain**:...
- **会话管理**:session的创建、共享、失效。 7. **Spring框架**: - **依赖注入**:IoC容器,bean的装配,注解配置。 - **AOP**:切面编程,通知类型,自动代理。 - **Spring MVC**:模型-视图-控制器架构,...
session失效的几种情况 - **clearSession**:手动调用session的invalidate方法。 - **顺次注销**:用户正常退出系统。 - **timeout**:长时间无活动导致session过期。 - **在服务器重启后**:重启服务器会清空所有...
### Portlet开发指南知识点概述 #### 一、Portlet简介 ...- 这些标签可以帮助开发者更轻松地处理Portlet的常见任务,如生成URL、处理请求等。 - 使用Portlet标签库可以提高开发效率,并减少代码错误。
77.5. 设置session失效的时间 89 77.6. 设置MIME响应类型 89 77.7. 设置tomcat的默认访问页面 89 77.8. 设置tomcat管理用户 89 77.9. 附录 90 78. websphere 90 79. 常见异常 90 79.1. nullpointerexception 90 79.2...