问题:公司项目将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"
}
}
});
如果大家还有好的办法,请多多指点哈!毕竟我不是专业前端,难免孤陋寡闻.
本文介绍了一种在Spring MVC框架中实现前后端分离项目会话管理的方法。通过自定义拦截器来判断用户会话是否过期,并在会话过期时通过Ajax请求返回403状态码,从而实现前端页面的重定向。
696

被折叠的 条评论
为什么被折叠?



