前後端分離後的session失效問題
阿新 • • 發佈:2019-01-22
問題:公司專案將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" } } });
如果大家還有好的辦法,請多多指點哈!畢竟我不是專業前端,難免孤陋寡聞.