/** * 拦截用户是否登录跳转到登录页 * 页面请求和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是一个JavaScript库,用于构建交互式的、数据驱动的Web应用。它主要基于Sencha Touch和Ext JS,提供了一套完整的组件和API,用于创建桌面和...
当检测到Session失效,服务器会清除与之相关的用户信息,然后将用户重定向到登录页面。登录页面应包含一个“记住我”或“自动填充”功能,允许用户选择是否在登录后保持登录状态。如果用户已经填写了表单数据,登录...
一同事求援:后台系统的登录成功了,但不能成功登进系统,仍然跳转到登录页,但同一套代码另一个环境却没有问题。 背景 经了解,他对同一个项目使用tomcat部署了两个环境,一个在开发服务器上,一个在他本机,两个...
最近由于一个项目,模块切换为ajax请求数据,当Session失效后,ajax请求后没有返回值,只有响应的html:<html>[removed]window.open(‘http://192.168.0.118:8080/welcomeAction/loginUI.do’,’_top’);...
综上所述,处理Ajax Session失效跳转登录页面的方法对于提升Web应用的用户体验和安全性能至关重要。通过在后端设置有效的Session失效拦截逻辑,并在前端根据返回的结果执行相应的处理,可以有效地解决Session失效时...
通过以上步骤,我们构建了一个完整的机制,能够在Spring MVC中检测并处理用户session失效的情况,有效地保护了系统的安全性和用户体验。确保每个用户的会话都是安全的,防止未授权访问,是任何Web应用程序开发中不可...
本文详细解析了一个基于JavaScript实现的Session超时提示逻辑,通过监测用户的鼠标点击行为来判断用户的活跃状态,并在Session即将过期时给予提示,从而提高了用户体验。此方法简单实用,适用于那些希望减少服务器...
`表示20分钟无操作后Session失效。 3. **结合Cookie和Session**: - 有时,为了兼顾用户体验和安全性,开发者会选择结合Cookie和Session。登录成功后,将Session ID存储在Cookie中,服务器通过验证Cookie中的...
Session是Web应用中用于存储用户特定信息的一种机制,它允许开发者在用户的会话期间保持状态,即使用户在不同的页面之间跳转,这些信息也能被保留下来。然而,在IFrame(Inline Frame)环境中,Session的管理变得...
然而,当涉及到用户会话(Session)管理时,AJAX请求可能会引发一些特殊的问题,特别是当Session失效时。本文将深入探讨这个主题,并提供解决方案。 Session是Web应用中用于跟踪用户状态的一种机制。它存储在服务器...
这段代码是关键,它确保在用户Session失效时,不会继续执行后续的Action逻辑,而是直接跳转到登录页面或指定的无Session页面。 `init()`方法在拦截器被加载到容器时调用,通常用于进行初始化操作,而`destroy()`...
这样,每当用户在网站的不同页面之间跳转时,服务器可以通过检查Session来识别用户是否已经登录,从而提供个性化的服务或者执行安全相关的操作。 首先,我们来详细了解一下什么是Session。在HTTP协议中,由于其无...
- 通过 `invalidate()` 方法可以使Session失效,服务器会释放HttpSession对象占用的资源。 - 通过 `setMaxInactiveInterval()` 方法可以设置Session的有效期,单位为秒,超过这个时间未使用,则Session自动失效。 ...
"项目访问时间过长session过期提醒"这个话题涉及到的是如何配置Web应用程序,以便在用户的会话过期时自动跳转到特定的过期页面,提醒用户重新登录。下面我们将详细讲解实现这一功能的关键步骤和技术。 首先,我们...
以上代码片段展示了如何通过过滤器实现Session过期后的自动跳转。这种方式更加灵活,可以直接控制HTTP响应,确保用户在Session过期后能够被正确地引导回登录页面,重新验证其身份。在实际应用中,还需要考虑其他因素...
5. **设置过期策略**:为避免内存资源浪费,应设定session在Redis中的过期时间,与Web应用中的session失效时间保持一致。 6. **测试与监控**:部署后,进行充分的测试以确保session的正确同步,同时配置监控工具,...
thinkphp开发的一个项目,登录成功后又跳转到登录页面,在提交信息后输出session都是正常的,没有问题,但是页面跳转后,session出现丢失现象,无法正常完成登陆。 通过查找资料,发现原来是bom头的原因。受COOKIE送...