后台代码
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
HandlerInterceptorAdapter :spring-MVC过滤器
提高三个方法:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
在preHandle中,访问前 --- 可以进行编码、安全控制等处理 ;
在postHandle中,方法访问后(调用了Service并返回ModelAndView,但未进行页面渲染) --- 有机会修改ModelAndView ;
在afterCompletion中,返回处理(已经渲染了页面) --- 可以根据ex是否为null判断是否发生了异常,进行日志记录 。
public class MyHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
//一些不需要过滤的连接 登陆方法 等
String url = request.getRequestURI();
if(url.endsWith("user/login") ){
return true;
}
if(request.getSession().getAttribute(Constants.USER_INFO_SESSION) == null){ //判断session中,用户信息是否为null,为null表示未登陆
//判断是否是AJAX访问
if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
response.setHeader("sessionstatus", "timeout");
return false;
}else{
response.sendRedirect(request.getContextPath()+"/index.jsp"); //非AJAX访问,页面跳转
return false;
}
}
return true;
}
}
前台 JQuery 和 EXT 框架的AJAX处理
JQuery统一处理
//全局的ajax访问,处理ajax清求时sesion超时
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=="timeout"){
//如果超时就处理 ,指定要跳转的页面
window.location.replace("${path}/common/login.do");
}
}
}
});
EXT统一处理
Ext.Ajax.on('requestcomplete', function(conn, response, optoins) {
if (response.getResponseHeader) {
if (response.getResponseHeader('sessionstatus') == 'timeout') {
window.location.href = 'http://www.baidu.com/'; //如果是过期,跳转到页面
}
}
});
分享到:
相关推荐
当Session超时时,通常需要将用户重定向到登录页面,提示他们重新登录。这可以通过监听器、过滤器或者在拦截器中实现。例如,在拦截器的`preHandle()`方法中,检查当前请求的Session是否有效,如果发现Session已经...
5. **测试和优化**:部署应用后,通过模拟用户在集群中的跳转来测试 Session 共享是否正常。根据实际效果,可能还需要调整 Memcached 的缓存策略、超时时间等参数,以及 memcached-session-manager 的配置项。 **...
在Java Web开发中,用户登录超时过滤器是一种常见的安全机制,用于检查用户是否已登录并保持其会话状态。这个过滤器会在用户访问受保护的页面之前进行拦截,如果发现用户会话已经超时或者不存在,将重定向到登录页面...
5. 配置Session超时和Cookie参数:你可以在`WebConfig`中调整Session的默认超时时间,以及设置Session的Cookie参数,如名称、路径、安全属性等。 6. 测试:编写测试用例,验证Session是否能够在不同服务器之间正确...
首先,我们来看在过滤器中处理Session超时的代码片段。过滤器是Servlet技术中的一种机制,可以在请求到达目标Servlet之前或之后对请求和响应进行预处理和后处理。在这个例子中,我们定义了一个`doFilter`方法,它是...
后端过滤器负责检测并处理Session超时,前端通过监听Ajax错误事件,捕获302状态码并模拟页面跳转,确保无论用户是通过常规链接还是Ajax请求,一旦Session超时都能被正确引导到登录页面。这种做法不仅维护了用户操作...
在J2EE应用程序中,处理用户会话是至关重要的,特别是在多服务器环境下,为了确保用户在不同服务器之间切换时能够保持其登录状态和购物车等信息。这就是session管理的用武之地。本项目通过结合使用Filter(过滤器)...
在Spring MVC框架中,Session超时后,通常需要将用户重定向到登录页面,以确保安全性。本文将探讨如何在Webix与Spring MVC的集成中实现在Session超时时自动跳转到登录页面。 首先,让我们理解问题的核心。Webix是一...
例如,我们可以通过过滤器检查Session是否已经超时,如果超时,则强制用户重新登录。此外,过滤器还可以记录Session活动日志,帮助开发者追踪用户行为和系统性能。 下面是一些可能的Session监控实践: 1. **...
Spring Session 是一个开源项目,由 Pivotal Software 开发,旨在提供一种在分布式环境中实现Session共享的...在实际应用中,可以根据需求调整配置,如设置Session超时时间、优化存储策略等,以达到最佳性能和可靠性。
- 登录成功后,Shiro会自动处理Session和Cookie,设置Remember Me功能可选。 5. **会话管理** - Shiro提供会话管理功能,可以监听会话创建、修改、销毁等事件,方便实现会话超时、跨域会话共享等功能。 - 使用...
当用户登录后,将用户信息存储在session中,并在每次请求时检查session是否超时。 4. **URL映射**:通过配置过滤器的`<url-pattern>`,我们可以指定哪些URL需要经过登录过滤器。例如,将所有与管理员相关的请求路径...
4. 配置session过期策略:根据需求设定session的超时时间,以及过期后是否需要清除Redis中的对应数据。 5. 测试验证:部署应用并进行测试,确保在不同服务器之间切换时,用户的session信息能正确保存和恢复。 总的...
在 Java Web 开发中,当session超时的情况下,普通页面的跳转好处理。关于Ajax的请求超时处理,就需要特殊处理下了。 先写一个统一的过滤器,或者拦截器,针对Ajax请求进行过滤处理,下面示例以Filter为例: ...
- **会话超时**:检查服务器配置,确保session的超时时间设置得合理,以免过早销毁session。 - **分布式环境**:在分布式部署的环境中,session复制或粘性会话配置可能不正确,导致session丢失。 6. **源码分析**...
在Spring Boot应用中,实现登录过滤功能主要是为了确保只有已登录的用户才能访问特定的资源。这个功能通常涉及到身份验证、会话管理以及过滤器的使用。下面将详细解释如何在Spring Boot中实现这一功能。 首先,我们...
-- Session超时时间 --> <beans:bean class="org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession" /> ``` 4. **启用Session共享** 在Web应用程序的入口类或`web....
因此,通常我们会采用过滤器(Filter)的方式来处理Session过期后的跳转。在`web.xml`中,我们需要配置一个名为`sessionFilter`的过滤器,指定对应的Filter类: ```xml <filter-name>sessionFilter</filter-name>...