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

本文介绍了一种在Spring MVC框架中实现前后端分离项目会话管理的方法。通过自定义拦截器来判断用户会话是否过期,并在会话过期时通过Ajax请求返回403状态码,从而实现前端页面的重定向。

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

 

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

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公众号: 江南烟雨中

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值