问题:公司项目将springMVC的jsp项目做了前后端分离的改造,前端全部采用html5+ajax方式跟后台交互,但是有一个问题就是:当后台的session失效后,刷新页面并不会自动跳转到首页!
目前我采取的办法是:后台定义一个拦截器,拦截所有请求(但不包括验证码接口、登陆接口),判断是否登陆失效即session过期,如果过期则返回前段403状态码,ajax前端收到后重定向到首页进行登陆。
package com.admin.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.admin.util.web.AuthorityUtils; /** * 权限控制拦截器 * */ public class AuthorityInterceptor implements HandlerInterceptor { private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptor.class); /** * 在DispatcherServlet之前执行 * */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { logger.info("************BaseInterceptor preHandle executed**********"); String reqUrl = request.getServletPath(); boolean isLogin = AuthorityUtils.isLogin(request); if((!reqUrl.contains("/checkCode.do") && !reqUrl.contains("/login.do")) && !isLogin){ response.setContentType("text/html;charset=utf-8"); response.setStatus(403); return false; } return true; } /** * 在controller执行之后的DispatcherServlet之后执行 * */ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView mv) throws Exception { logger.info("************BaseInterceptor postHandle executed**********"); } /** * 在页面渲染完成返回给客户端之前执行 * */ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception e) throws Exception { logger.info("************BaseInterceptor afterCompletion executed**********"); } }
spring-mvc的配置:
<mvc:interceptors> <mvc:interceptor> <!-- 对登录操作进行拦截 --> <mvc:mapping path="/**/*.do"/> <bean class="com.admin.interceptor.AuthorityInterceptor" /> </mvc:interceptor> </mvc:interceptors>
前端ajax:
$.ajax({ url: "/user/info.do", type: 'post', data: "", dataType: "json", success: function (data) { console.log(data); .... }, error: function (XMLHttpRequest, textStatus, errorThrown) { if(XMLHttpRequest.status=='403'){ window.location.href="/index.html" } } });
如果大家还有好的办法,请多多指点哈!毕竟我不是专业前端,难免孤陋寡闻.