springMVC session过期跳转到登录界面
2018-04-02 15:52
399 查看
1、非ajax的传统型跳转和ajax请求数据跳转
2、使用springMVC拦截器拦截请求,判断session是否过期
3、使用ajaxSetup 全局判断session请求是否过期。
这种方式不是最好的方式,貌似有三种方式处理ajax重定向的问题,修改jquery源码、设置response头、或者每次ajax增加判断。我觉得修改jquery源码不好,每次判断又要改大量的前端代码,累死-_-||!!,所有我觉得最小程度修改前端代码是最好的选择。所以选择了设置response头。
部分拦截器代码:
实现HandlerInterceptor接口,重写prehandle方法 public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws SessionTimeoutException, IOException {
String requestUrl = request.getRequestURI(); //获取请求的URL
for(String url : allowUrls) { //判断请求URL是否属于请求白名单
if(requestUrl.endsWith(url)||requestUrl.indexOf(url)>=0) {
return true;
}
}
String session = String.valueOf(WebUtils.getSessionAttribute(request, "userId"));
String session1 = String.valueOf(WebUtils.getSessionAttribute(request, "zmccUser"));
if("null".equals(session) || "null".equals(session1)) { //判断session是否过期,如果是null则session过期
if(request.getHeader("x-requested-with")!=null){ // 非ajax请求比 ajax请求少一个x-requested-with属性,所以有x-requested-with属性则为ajax请求
response.setHeader("sessionstatus", "timeout"); //设置response头,前台依此来判断是否session过期
return false;
}else{
throw new SessionTimeoutException(); //非ajax请求,在我的项目中就是 返回ModelAndView,直接重定向就可以了,抛出SessionTimeoutException自定义异常,注意这是我自己定义的异常
}
} else {
return true;
}
} 配置springMVC的XML <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/*.do" />
<bean class="com.uniware.util.SessionTimeoutInterceptor" >
<property name="allowUrls">
<list> <!-- 这些list是可以访问的白名单,不需要验证session -->
<value>/login</value>
<value>LoginController</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>
如果上面的代码或者思路有问题,请您指导。谢谢
2、使用springMVC拦截器拦截请求,判断session是否过期
3、使用ajaxSetup 全局判断session请求是否过期。
这种方式不是最好的方式,貌似有三种方式处理ajax重定向的问题,修改jquery源码、设置response头、或者每次ajax增加判断。我觉得修改jquery源码不好,每次判断又要改大量的前端代码,累死-_-||!!,所有我觉得最小程度修改前端代码是最好的选择。所以选择了设置response头。
部分拦截器代码:
实现HandlerInterceptor接口,重写prehandle方法 public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws SessionTimeoutException, IOException {
String requestUrl = request.getRequestURI(); //获取请求的URL
for(String url : allowUrls) { //判断请求URL是否属于请求白名单
if(requestUrl.endsWith(url)||requestUrl.indexOf(url)>=0) {
return true;
}
}
String session = String.valueOf(WebUtils.getSessionAttribute(request, "userId"));
String session1 = String.valueOf(WebUtils.getSessionAttribute(request, "zmccUser"));
if("null".equals(session) || "null".equals(session1)) { //判断session是否过期,如果是null则session过期
if(request.getHeader("x-requested-with")!=null){ // 非ajax请求比 ajax请求少一个x-requested-with属性,所以有x-requested-with属性则为ajax请求
response.setHeader("sessionstatus", "timeout"); //设置response头,前台依此来判断是否session过期
return false;
}else{
throw new SessionTimeoutException(); //非ajax请求,在我的项目中就是 返回ModelAndView,直接重定向就可以了,抛出SessionTimeoutException自定义异常,注意这是我自己定义的异常
}
} else {
return true;
}
} 配置springMVC的XML <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/*.do" />
<bean class="com.uniware.util.SessionTimeoutInterceptor" >
<property name="allowUrls">
<list> <!-- 这些list是可以访问的白名单,不需要验证session -->
<value>/login</value>
<value>LoginController</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>
<!-- 处理自定义异常,直接跳转,当然你也可以自己实现这个AbstractHandlerExceptionResolver --> <bean id="handlerExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" > <property name="exceptionMappings"> <props> <prop key="com.uniware.util.SessionTimeoutException">redirect:/login.jsp</prop> </props> </property> </bean>
/** * 设置未来(全局)的AJAX请求默认选项
* 主要设置了AJAX请求遇到Session过期的情况 */ $.ajaxSetup({ type: 'POST', complete: function(xhr,status) { var sessionStatus = xhr.getResponseHeader('sessionstatus'); if(sessionStatus == 'timeout') { window.top.location.href = window.top.location; } } });最后你需要把上面的这段jquery代码放到每个请求前,我的项目有一个公共的工具js,我把这段贴在上面就可以了,这样前端我就加了这一项,但是如果你的每个jsp引入的文件都不一样,没有公共的js。那你就把他贴在jquery.js这种代码里好了,当然最好别这样做。
如果上面的代码或者思路有问题,请您指导。谢谢
相关文章推荐
- webix+springmvc session超时跳转登录页面
- session过期,iframe跳转出登录界面
- Asp.net MVC 、Extjs 解决Session过期跳到登录界面的问题
- EasyUI+SpringMVC配置session过期跳转页面
- MVC 访问IFrame页面Session过期后跳转到登录页面
- 在session过期后如何跳转到登录页面
- 解决方案:SSM+vue+webpack+vue-resource+vue-route路由项目验证session过期跳转至登陆界面
- ajax前置处理实现异步请求session过期时跳转登录页面
- Session过期后自动跳转到登录页面的实例代码
- 重写ajax方法实现异步请求session过期时跳转登录页面
- 处理jquery的ajax请求session过期跳转到登录页面
- Ext6.x+springmvc+shiro框架下实现session过期跳转到登录页面
- cookie设置导致session超时,登录不断跳转到登录界面
- session失效,如何跳转回登录界面
- session过期后自动跳转到登录页面
- 解决easyui在session过期后iframe跳转到登录页面的问题
- .net 中ifram的session过期,跳转到登录页面
- 怎么实现登录之后跳转到登录之前的页面?SpringMVC+Freemarker
- Spring 3 + dwz session过期跳转解决方法
- 重写ajax方法实现异步请求session过期时跳转登录页面(转)