`
wenjinglian
  • 浏览: 820367 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

session失效通过头信息判断跳转

阅读更多
/**
 * 拦截用户是否登录跳转到登录页
 * 页面请求和ajax异步请求都能跳转
 */
@Component
public class SessionInterceptor extends AbstractInterceptor {

    private static String APPLICATION_JSON = "application/json";

    private static String SESSION_DESTROYED = "{\"destroyed\":true}";

    private static final Log logger = LogFactory.getLog(SessionInterceptor.class);

    private static final long serialVersionUID = -6541521429930621158L;

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        User user = (User) ActionContext.getContext().getSession().get(SessionConstants.SESSION_USER_KEY);
        if ((null == user)) {
            logger.info("session is invalid");
            if (isJsonRequest()) {
                try {
//异步请求返回过session过期标识,ajax通用方法中统一跳转                    ServletActionContext.getResponse().getOutputStream().write(SESSION_DESTROYED.getBytes("utf-8"));
                } catch (Exception e) {
                    logger.error("ajax output exception", e);
                }
                return null;
            }
            //同步请求跳转
            return "login";
        } else {
            return invocation.invoke();
        }
    }

/**
* 通过头信息判断是否为ajax json异步请求
*/
    private boolean isJsonRequest() {
        HttpServletRequest request = ServletActionContext.getRequest();
        String accept = request.getHeader("accept");
        if(logger.isInfoEnabled()){
            logger.info("accept:" + accept);
        }
        if (StringUtils.contains(accept, APPLICATION_JSON)) {
            return true;
        }
        return false;
    }
}

 

 $.ajax( {             
		        url : url+'?randomCode='+(Math.random()),
		        data : param,
		        cache : cacheType,
		        type : postType,
		        dataType : dataType,
		        processData : processData ,
		        async : async,
		        timeout : timeout,
		        success : function(data){
                                //session销毁,跳转
		    		if(data.destroyed){
		    			utils.locationHref(sys.sysdomain + "/login.html");
		    		}else{
		    			if(successCB){
			    			successCB(data);
			    		}
		    		}
		    		
		    	},
		        error : function(errorObj){
		    		if(errorCB){
		    			errorCB(errorObj);
		    		}else{
		    			alert("请求数据失败,请稍候再试。("+errorObj['statusText']+")");
		    		}
		    	},
		    	beforeSend : function(jqXHR, settings){

		    	}
		    });

 

分享到:
评论

相关推荐

    ext session失效 页面跳转

    下面将详细讨论EXT Session失效以及如何实现页面跳转至登录页。 首先,EXT是一个JavaScript库,用于构建交互式的、数据驱动的Web应用。它主要基于Sencha Touch和Ext JS,提供了一套完整的组件和API,用于创建桌面和...

    session失效重新登录后,返回之前页面,并保留表单数据

    当检测到Session失效,服务器会清除与之相关的用户信息,然后将用户重定向到登录页面。登录页面应包含一个“记住我”或“自动填充”功能,允许用户选择是否在登录后保持登录状态。如果用户已经填写了表单数据,登录...

    nginx反向代理导致session失效的问题解决

    一同事求援:后台系统的登录成功了,但不能成功登进系统,仍然跳转到登录页,但同一套代码另一个环境却没有问题。 背景 经了解,他对同一个项目使用tomcat部署了两个环境,一个在开发服务器上,一个在他本机,两个...

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

    最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html:<html>[removed]window.open(‘http://192.168.0.118:8080/welcomeAction/loginUI.do’,’_top’);...

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

    综上所述,处理Ajax Session失效跳转登录页面的方法对于提升Web应用的用户体验和安全性能至关重要。通过在后端设置有效的Session失效拦截逻辑,并在前端根据返回的结果执行相应的处理,可以有效地解决Session失效时...

    详解springmvc控制登录用户session失效后跳转登录页面

    通过以上步骤,我们构建了一个完整的机制,能够在Spring MVC中检测并处理用户session失效的情况,有效地保护了系统的安全性和用户体验。确保每个用户的会话都是安全的,防止未授权访问,是任何Web应用程序开发中不可...

    JS之Session超时提示代码

    本文详细解析了一个基于JavaScript实现的Session超时提示逻辑,通过监测用户的鼠标点击行为来判断用户的活跃状态,并在Session即将过期时给予提示,从而提高了用户体验。此方法简单实用,适用于那些希望减少服务器...

    c#实现cookie和session的登陆实例

    `表示20分钟无操作后Session失效。 3. **结合Cookie和Session**: - 有时,为了兼顾用户体验和安全性,开发者会选择结合Cookie和Session。登录成功后,将Session ID存储在Cookie中,服务器通过验证Cookie中的...

    IFrame中Session丢失的解决办法

    Session是Web应用中用于存储用户特定信息的一种机制,它允许开发者在用户的会话期间保持状态,即使用户在不同的页面之间跳转,这些信息也能被保留下来。然而,在IFrame(Inline Frame)环境中,Session的管理变得...

    ajax请求Session失效问题

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

    struts2拦截器使用(用户session失效后的统一页面指向).docx

    这段代码是关键,它确保在用户Session失效时,不会继续执行后续的Action逻辑,而是直接跳转到登录页面或指定的无Session页面。 `init()`方法在拦截器被加载到容器时调用,通常用于进行初始化操作,而`destroy()`...

    session_test.zip

    这样,每当用户在网站的不同页面之间跳转时,服务器可以通过检查Session来识别用户是否已经登录,从而提供个性化的服务或者执行安全相关的操作。 首先,我们来详细了解一下什么是Session。在HTTP协议中,由于其无...

    session概念及基本应用

    - 通过 `invalidate()` 方法可以使Session失效,服务器会释放HttpSession对象占用的资源。 - 通过 `setMaxInactiveInterval()` 方法可以设置Session的有效期,单位为秒,超过这个时间未使用,则Session自动失效。 ...

    项目访问时间过长session过期提醒

    "项目访问时间过长session过期提醒"这个话题涉及到的是如何配置Web应用程序,以便在用户的会话过期时自动跳转到特定的过期页面,提醒用户重新登录。下面我们将详细讲解实现这一功能的关键步骤和技术。 首先,我们...

    Session过期后自动跳转到登录页面的实例代码

    以上代码片段展示了如何通过过滤器实现Session过期后的自动跳转。这种方式更加灵活,可以直接控制HTTP响应,确保用户在Session过期后能够被正确地引导回登录页面,重新验证其身份。在实际应用中,还需要考虑其他因素...

    双机部署session共享

    5. **设置过期策略**:为避免内存资源浪费,应设定session在Redis中的过期时间,与Web应用中的session失效时间保持一致。 6. **测试与监控**:部署后,进行充分的测试以确保session的正确同步,同时配置监控工具,...

    php页面跳转session cookie丢失导致不能登录等问题的解决方法

    thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆。 通过查找资料,发现原来是bom头的原因。受COOKIE送...

Global site tag (gtag.js) - Google Analytics