成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

sessionStorage記錄返回前端的數(shù)據(jù),用于解決登錄攔截器刷新頁(yè)面的問題

番茄西紅柿 / 3185人閱讀

1.問題出現(xiàn)的場(chǎng)景與解決

實(shí)現(xiàn)一個(gè)登錄攔截器,重寫doFilter方法,判斷用戶的登錄狀態(tài),在用戶長(zhǎng)時(shí)間未操作或者異地登錄時(shí)前端進(jìn)行提示,完整代碼如下

  1 public class LoginValidateFilter implements Filter {
  2 
  3     private String errorMessage;
  4     private Logger log = LoggerFactory.getLogger(this.getClass());
  5 
  6     @Override
  7     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
  8                          FilterChain chain) throws IOException, ServletException {
  9         try {
 10             HttpServletRequest request = (HttpServletRequest) servletRequest;
 11             HttpServletResponse response = (HttpServletResponse) servletResponse;
 12 
 13             String url = request.getRequestURI();
 14             if (isResourceRequest(url)
 15                     || isNotLoginValidate(url, request)) {
 16                 chain.doFilter(servletRequest, servletResponse);
 17                 return;
 18             }
 19             //判斷用戶是否在登錄狀態(tài)
 20             if (isLogin(request, response)) {
 21                 //更新session時(shí)間:心跳檢測(cè)的請(qǐng)求不更新
 22                 if (url.indexOf("/manage/session/isAlive.do") < 0) {
 23                     SessionUtil.updateSession(request);
 24                 }
 25                 chain.doFilter(servletRequest, servletResponse);
 26             } else {
 27                 SessionUtil.removeSession(request);
 28                 String path = request.getContextPath();
 29                 response.setContentType("text/html");
 30 //                String responsePage = "";
 32 
 33                 String responsePage = "";
 34                 response.getWriter().print(responsePage);
 35             }
 36         } catch (Exception e) {
 37             log.error("登錄過濾器異常:{}", e);
 38             throw new ServletException(e);
 39         }
 40     }
 41 
 42     private boolean isLogin(HttpServletRequest request, HttpServletResponse response) {
 43         Session session = SessionUtil.getSession(request);
 44         //未登錄
 45         if (session == null) {
 46             errorMessage = "";
 47             Session oldSession = SessionUtil.getOldSession(request);
 48             if (oldSession != null) {
 49                 errorMessage = "您的賬號(hào)在異地登錄(" + oldSession.getIp() + "),如非授權(quán),建議修改密碼";
 50             }
 51             return false;
 52         }
 53         //登錄超時(shí)
 54         if (SessionUtil.isLoginTimeout(session)) {
 55             SessionUtil.removeSession(session);
 56             errorMessage = "因長(zhǎng)時(shí)間未操作,系統(tǒng)已自動(dòng)退出,請(qǐng)重新登錄";
 57             return false;
 58         }
 59         return true;
 60     }
 61 
 62     /**
 63      * 不用過濾的額外配置
 64      * 沒有登錄時(shí),有些請(qǐng)求是必須的,因此不用過濾
 65      *
 66      * @param url
 67      * @param request
 68      * @return
 69      */
 70     private boolean isNotLoginValidate(String url, HttpServletRequest request) {
 71         for (String path : GridProperties.NOT_VALIDATE_PATH) {
 72             if (url.startsWith(request.getContextPath() + path)) {
 73                 return true;
 74             }
 75         }
 76         return false;
 77     }
 78 
 79     /**
 80      * 資源請(qǐng)求
 81      *
 82      * @param url
 83      * @return
 84      */
 85     private boolean isResourceRequest(String url) {
 86         if (url.endsWith(".jpg") || url.endsWith(".gif")
 87                 || url.endsWith(".css") || url.endsWith(".js")
 88                 || url.endsWith(".png") || url.endsWith(".bmp")
 89                 || url.endsWith(".ico") || url.endsWith(".txt")
 90                 || url.endsWith(".apk") || url.endsWith("bootstrap.min.css.map")) {
 91             return true;
 92         }
 93         return false;
 94     }
 95 
 96     @Override
 97     public void destroy() {
 98         this.errorMessage = "";
 99     }
100 
101     @Override
102     public void init(FilterConfig filterConfig) throws ServletException {
103         this.errorMessage = "";
104     }
105 
106 }

第30-31行返回給前端返回提示信息,通過url進(jìn)行傳參進(jìn)行提示,前端頁(yè)面再進(jìn)行獲取,往往會(huì)出現(xiàn)亂碼和刷新頁(yè)面數(shù)據(jù)還在的問題,

考慮通過后端方式給前端傳回?cái)?shù)據(jù) 都沒有成功。

最后通過使用sessionStorage進(jìn)行傳遞參數(shù),問題解決。

前端的主要處理代碼如下

     console.log(window.sessionStorage.getItem(errorMessage));
        var message = window.sessionStorage.getItem(errorMessage);
        if (message !=null) {
            $(".login-errorMsg").text(message);
            window.sessionStorage.removeItem("errorMessage");
        }else {
            $(".login-errorMsg").text("");
        }

2.認(rèn)識(shí)sessionStorage

通過瀏覽器的F12 我們可以看到如下界面

可以看到我們可以使用localStorage 和sessionStorage來存儲(chǔ)前端交互數(shù)據(jù)

sessionStorage簡(jiǎn)單的存取和讀取方式如下:

sessionStorage.setItem(testKey,這是一個(gè)測(cè)試的value值); // 存入一個(gè)值

window.sessionStorage.getItem(key); //取出一個(gè)值

sessionStorage.removeItem("key");//刪除某個(gè)key

sessionStorage.clear();//清除所有key/value

可以大膽推斷一下,localStorage 的使用方式應(yīng)該也是類似的,

具體的使用方法可以參考:https://www.cnblogs.com/polk6/p/5512979.html

https://developer.mozilla.org/zh-CN/docs/Web/API/Window/sessionStorage

https://www.cnblogs.com/minigrasshopper/p/8064367.html

sessionStorage   詳細(xì)X 網(wǎng)絡(luò)釋義 sessionStorage: 會(huì)話存儲(chǔ) window  [w?nd??]  window&type=1詳細(xì)X 基本翻譯 n. 窗;窗口;窗戶 網(wǎng)絡(luò)釋義 window: 窗 Window function: 窗函數(shù) show window: 櫥窗

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/1423.html

相關(guān)文章

  • 刷新頁(yè)面vuex數(shù)據(jù)不消失和不跳轉(zhuǎn)頁(yè)面

    摘要:先說點(diǎn)什么和路由攔截這一塊搗鼓的有一段時(shí)間了總算是爬出來了特地來分享一下首先聲明沒有什么基礎(chǔ)介紹用的是登錄狀態(tài)存儲(chǔ)的方法進(jìn)入正題刷新刷新相當(dāng)與重啟項(xiàng)目,之前獲取到的數(shù)據(jù)也只是通過暫存起來,項(xiàng)目關(guān)閉時(shí)就不見了,這有些像電腦重啟,存儲(chǔ)在的數(shù)據(jù)會(huì) 先說點(diǎn)什么 vuex和路由攔截這一塊搗鼓的有一段時(shí)間了,總算是爬出來了,特地來分享一下,首先聲明沒有什么基礎(chǔ)介紹,用的是登錄狀態(tài)存儲(chǔ)session...

    tracymac7 評(píng)論0 收藏0
  • 前端能做到徹底權(quán)限控制嗎?

    摘要:有一天突然想到一個(gè)問題,端的權(quán)限控制真的能控制權(quán)限嗎僅僅靠前端,能不能做到真正的權(quán)限控制如果需要后臺(tái)配合,應(yīng)該如何配合可能這是一個(gè)老生常談的問題,但還是想整理下,有誤的地方望大家指出。 有一天突然想到一個(gè)問題,web端的權(quán)限控制:1.真的能控制權(quán)限嗎?2.僅僅靠前端,能不能做到真正的權(quán)限控制?3.如果需要后臺(tái)配合,應(yīng)該如何配合?可能這是一個(gè)老生常談的問題,但還是想整理下,有誤的地方望大...

    luck 評(píng)論0 收藏0
  • 前后端分離——token超時(shí)刷新策略

    摘要:實(shí)現(xiàn)目標(biāo)延長(zhǎng)過期時(shí)間活躍用戶在過期時(shí),在用戶無感知的情況下動(dòng)態(tài)刷新,做到一直在線狀態(tài)不活躍用戶在過期時(shí),直接定向到登錄頁(yè)登錄返回字段如何簽發(fā),請(qǐng)看上一篇推文,這里不做過多介紹。如果你有更好的做法,歡迎留言告知我,謝謝啦。 前言 記錄一下前后端分離下————token超時(shí)刷新策略! 需求場(chǎng)景 昨天發(fā)了一篇記錄 前后端分離應(yīng)用——用戶信息傳遞 中介紹了token認(rèn)證機(jī)制,跟幾位群友討論了...

    hatlonely 評(píng)論0 收藏0
  • Vue中驗(yàn)證登錄狀態(tài)

    摘要:用存儲(chǔ)用戶路由守衛(wèi)路由中設(shè)置的字段就在當(dāng)中每次跳轉(zhuǎn)的路徑登錄狀態(tài)下訪問頁(yè)面會(huì)跳到如果沒有訪問任何頁(yè)面。一個(gè)簡(jiǎn)單的保存登錄狀態(tài)的小。 Vue項(xiàng)目中實(shí)現(xiàn)用戶登錄及token驗(yàn)證 先說一下我的實(shí)現(xiàn)步驟: 使用easy-mock新建登錄接口,模擬用戶數(shù)據(jù) 使用axios請(qǐng)求登錄接口,匹配賬號(hào)和密碼 賬號(hào)密碼驗(yàn)證后, 拿到token,將token存儲(chǔ)到sessionStorage中,并跳轉(zhuǎn)到首...

    draveness 評(píng)論0 收藏0
  • 「Vue實(shí)踐」武裝你前端項(xiàng)目

    摘要:所有的高階抽象組件是通過定義選項(xiàng)來聲明的。所以一般在生命周期或者中,需要用實(shí)例的方法清除可當(dāng)你有多個(gè)時(shí),就需要重復(fù)性勞動(dòng)銷毀這件事兒。更多的配置請(qǐng)看雙端開啟開啟壓縮的好處是什么可以減小文件體積,傳輸速度更快。本文目錄 接口模塊處理 Vue組件動(dòng)態(tài)注冊(cè) 頁(yè)面性能調(diào)試:Hiper Vue高階組件封裝 性能優(yōu)化:eventBus封裝 webpack插件:真香 本文項(xiàng)目基于Vue-Cli3,想知...

    曹金海 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<