前后端分离后的session失效问题

问题:公司项目将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"
           	}
       }
	});

如果大家还有好的办法,请多多指点哈!毕竟我不是专业前端,难免孤陋寡闻.


猜你喜欢

转载自blog.csdn.net/shengqianfeng/article/details/79919130