`
xiongzhenhui
  • 浏览: 209642 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Struts2 AJAX请求 Session失效处理

 
阅读更多
在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")); 
       } 
    } 
}); 
分享到:
评论

相关推荐

    ajax请求Session失效问题

    然而,当涉及到用户会话(Session)管理时,AJAX请求可能会引发一些特殊的问题,特别是当Session失效时。本文将深入探讨这个主题,并提供解决方案。 Session是Web应用中用于跟踪用户状态的一种机制。它存储在服务器...

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

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

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

    以下是一个简单的Struts2拦截器示例,用于处理Ajax请求和Session失效的情况: ```java public String intercept(ActionInvocation invocation) throws Exception { ActionContext ac = invocation....

    Struts2验证码

    在Struts2的Action中,取出Session中的验证码与用户输入的进行比较,如果匹配则通过验证,否则返回错误信息。 ```java String userCaptcha = actionRequest.getParameter("captcha"); String sessionCaptcha = ...

    struts1的令牌解决页面重复提交问题

    - 对于Ajax请求,可能需要自定义拦截器或手动处理令牌,因为隐藏字段不会随异步请求发送。 通过以上步骤,Struts1的令牌机制可以有效地防止页面的重复提交,保护业务数据的完整性。然而,随着技术的发展,现代框架...

    java餐厅点餐管理系统源码带前后台数据库 MySQL源码类型 WebForm

    使用技术:spring+Struts+hibernate+bootstrap+jquery+ajax 源码描述 SSH开发一个前台结算,前台点餐,后台综合信息管理,后厨配菜的完整源码 登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象...

    MF00617-JAVA餐厅点餐管理源码.zip

    使用技术:spring+Struts+hibernate+bootstrap+jquery+ajax 源码描述 SSH开发一个前台结算,前台点餐,后台综合信息管理,后厨配菜的完整源码 登陆:前后台同用一个登陆页面,登陆等过用户名访问数据库获取该对象...

    javaweb 实现的图书管理系统

    若Session失效或丢失,用户将被重定向到登录页面。 2. **增删改查操作** - **添加图书**:用户可以输入新图书的相关信息(如书名、作者、出版社等),这些数据通过HTTP请求发送到服务器,服务器端处理并将其存储到...

    深入Javaweb项目开发

    同时,会介绍会话的概念,如session对象的创建、设置属性、获取属性和失效,以及如何处理跨页面的数据共享。 5. **第五章:MVC模式与JSP自定义标签** MVC(Model-View-Controller)模式是JavaWeb开发中常用的设计...

    SSH框架登录示例 同一账户只能一人登录

    用户注销 非正常退出 session失效 三种情况来进行 控制 分别使用了两种方式 进行了实现1:不修改数据库使用HashMap+HttpSessionListener 2:给数据库添加online列 使用(数据库脚本包含在内)HashMap+...

    java面试知识

    - **拦截器**:处理请求前后的逻辑。 - **Action**:处理业务逻辑。 - **配置文件**:配置拦截器栈、结果类型等。 ##### Struts2中result中的type类型 - **dispatcher**:将请求转发给指定页面。 - **chain**:...

    java面试题.rar

    - **会话管理**:session的创建、共享、失效。 7. **Spring框架**: - **依赖注入**:IoC容器,bean的装配,注解配置。 - **AOP**:切面编程,通知类型,自动代理。 - **Spring MVC**:模型-视图-控制器架构,...

    java面试题实践收集及答案详解

    session失效的几种情况 - **clearSession**:手动调用session的invalidate方法。 - **顺次注销**:用户正常退出系统。 - **timeout**:长时间无活动导致session过期。 - **在服务器重启后**:重启服务器会清空所有...

    portlet开发指南

    ### Portlet开发指南知识点概述 #### 一、Portlet简介 ...- 这些标签可以帮助开发者更轻松地处理Portlet的常见任务,如生成URL、处理请求等。 - 使用Portlet标签库可以提高开发效率,并减少代码错误。

    java面试题

    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...

Global site tag (gtag.js) - Google Analytics