新聞中心
環(huán)境:Spring Boot 2.2.11.RELEASE + Spring Security5.2.7

創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的沂南網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
說下背景:我們有個項目是基于NW.js,用戶登錄是通過Spring Security來實現(xiàn)的。我們在nw.js環(huán)境下做了一個校驗,如果用戶2小時內(nèi)沒有任何的操作那么系統(tǒng)將自動調(diào)整到登錄頁面;這樣就出現(xiàn)了問題,我們有很多的用戶是7*24小時不關(guān)電腦的。當(dāng)用戶下班2小時后系統(tǒng)就自動跳轉(zhuǎn)到了登錄頁面,第二天用戶上班了后登錄系統(tǒng)調(diào)不到之前的操作頁面。用戶天天投訴。其實當(dāng)我們訪問需要用戶認(rèn)證的頁面時沒登錄情況下都會跳到登錄頁如果30分鐘內(nèi)什么都不操作同樣也是跳不回去的。
基于上面的問題后來跟蹤了下源碼發(fā)現(xiàn)Spring Security是通過session來保存之前的請求的所有相關(guān)信息,源碼如下:
認(rèn)證通過后執(zhí)行下面的邏輯
AbstractAuthenticationProcessingFilter.java
這里的successHandler默認(rèn)是使用的如下handler。
SavedRequestAwareAuthenticationSuccessHandler.java
requestCache對象的實例是HttpSessionRequestCache
HttpSessionRequestCache.java部分源碼
- DefaultSavedRequest savedRequest = new DefaultSavedRequest(request,portResolver);
- if (createSessionAllowed || request.getSession(false) != null) {
- request.getSession().setAttribute(this.sessionAttrName, savedRequest);
- logger.debug("DefaultSavedRequest added to Session: " + savedRequest);
- }
這里就是把當(dāng)前的request對象進行了保存然后放到了session中,保存后再跳轉(zhuǎn)到登錄授權(quán)頁面。session不配置的情況下默認(rèn)就是30分鐘。
當(dāng)時為了簡單快速解決問題,我之間吧session的有效性調(diào)整了1天時間,安靜了一段時間后,以為沒事了。萬萬沒想到后來有幾個用戶有投訴了o(╥﹏╥)o,大概了解了下他們說有時候幾天才用一次系統(tǒng)(就這樣他們還是不關(guān)電腦)。。。沒辦法只能繼續(xù)改代碼了。
通過上面貼的源碼也知道了就是從session獲取到之前的request對象然后進行了重定向。
在配置HttpSecurity時配置自定義sucessHandler,如下
nw.js在做跳轉(zhuǎn)的時候,我把用戶之前的操作頁面地址記錄下來作為一個參數(shù)傳遞。這樣就不怕session過期了。
網(wǎng)頁名稱:SpringSecurity自定義登錄成功后的邏輯
新聞來源:http://fisionsoft.com.cn/article/cosjhij.html


咨詢
建站咨詢
