98国产在线视频福利_欧亚v视频日韩一区二区_国产在线精彩视频_亚洲伊人久久综合影院_亚洲欧美高清激情精品一区_少妇熟女天堂网av_午夜福利日本专区_中美女子成人毛片_大荫蒂毛茸茸视频国产_小14萝裸体自慰洗澡大尺度
登錄
注冊
關(guān)于我們
簡(jiǎn)體中文
ENGLISH
搜索
購物車(chē)
0 ITEMS ON YOUR CART
去購物車(chē)結算
合計:
¥0
首頁(yè)
動(dòng)態(tài)
方案
案例
專(zhuān)欄
期刊
聯(lián)系我們
首頁(yè)
期刊
Spring Boot Ext JS準前后端框架應用的會(huì )話(huà)(Session)處理
Ext JS開(kāi)發(fā)大全
第1章 Ext JS快速入門(mén)示例[4/4]
第12章[12.10]富文本編輯器 CKEditor與Ext JS的整合
第12章[12.10.1] Ext JS + CKEditor+Spring Boot 實(shí)現編輯器圖片上傳
第11章[11.6] Ext JS 自行搭建遠端庫的包升級版本后找不到的問(wèn)題解決
[Ext JS 4] 實(shí)戰之Grid, Tree Gird編輯
ext命令集
第12章[12.3] Ext JSGrid中的超鏈接列及其功能實(shí)現
[Ext JS]textfield添加compositionstart、compositionupdate 和compositionend _os
[Ext JS ] 動(dòng)添切換字段的必填與非必填
3.1 Ext JS 組件總覽
[Ext JS] Grid表格批量編輯的實(shí)現
Ext JS 快速開(kāi)發(fā)工具
帶觸發(fā)器按鈕的輸入框
Ext JS的布爾對象類(lèi)型處理及便捷方法
Ext JS的Object類(lèi)型處理及便捷方法
ExtJS RadioGroup(單選按鈕組) 使用及注意事項
Ext JS 模擬后端數據實(shí)現
ToolTip 實(shí)現全介紹
Ext JS下拉單選框(Combobox,TagFied)使用及疑難問(wèn)題解決
Ext JS應用測試概覽
Sencha Studio 監視工具( Inspect Tool)
Ext JS 4 升級指南
Ext JS 如何定義公用方法(單例類(lèi) or 靜態(tài)方法)
Ext JS的模塊化開(kāi)發(fā)(Package)
Ext3 -- Form 實(shí)例。 用來(lái)migrate file 數據到DB用的
ExtJS 3 在Tab下加入Form 實(shí)例
Extjs Grid 中給已經(jīng)添加過(guò)Filter的列增加標識
Extjs 實(shí)戰之 Ext.tree.TreePanel Tree無(wú)法顯示
Extjs彈出框的異步執行
Grid 動(dòng)態(tài)該表列( reconfigure)的性能改善
Spring Boot Ext JS準前后端框架應用的會(huì )話(huà)(Session)處理
[Ext JS 4] Extjs 圖表 Legend(圖例)的分行與分列顯示
[Ext JS 4] Extjs 之 initComponent 和 constructor的區別
[Ext JS 4] Grid 中的單元格添加Tooltip 的效果
[Ext JS 4] Grid 實(shí)戰之分頁(yè)功能
[Ext JS 4] Grid 組件
[Ext JS 4] MVC 應用程序框架
[Ext JS 4] MVC 應用程序框架
發(fā)布 [Ext JS 4] contentEL,renderTo, applyTo 釋義與區別
[Ext JS 4] 動(dòng)態(tài)加載
[Ext JS 4] 實(shí)戰之 ComboBox 和 DateField (消失之解決辦法)
[Ext JS 4] 實(shí)戰之 Picker 和 Picker Field
[Ext JS 4] 實(shí)戰之 帶week(星期)的日期選擇控件(二)
[Ext JS 4] 實(shí)戰之 ComboBox 和 DateField 的點(diǎn)擊事件在IE下失效
## [Ext JS 4] 實(shí)戰之 帶week(星期)的日期選擇控件(三)
[Ext JS 4] 實(shí)戰之 帶week(星期)的日期選擇控件
[Ext JS 4] 實(shí)戰之Chart 坐標控制(單坐標,雙坐標)
[Ext JS 4] 實(shí)戰之Chart, Column Chart 定制顏色
[Ext JS 4] 實(shí)戰之Grid, Tree Gird 動(dòng)態(tài)添加列
[Ext JS 4] 實(shí)戰之Grid, Tree Gird 動(dòng)態(tài)添加列續(性能考慮)
[Ext JS 4] 實(shí)戰之Grid, Tree Gird 動(dòng)態(tài)添加行
[Ext JS 4] 實(shí)戰之Grid, Tree Gird 添加按鈕列
[Ext JS 4] 實(shí)戰之Grid, Tree Gird編輯Cell
[Ext JS 4] 實(shí)戰之Load Mask - 在Grid Reconfigure的使用狀況
[Ext JS 4] 實(shí)戰之Load Mask(加載遮罩)的顯示與隱藏
[Ext JS 4] 實(shí)戰之多選下拉單 (帶checkbox) 續 - 帶ALL 選項
[Ext JS 4] 實(shí)戰之多選下拉單 (帶checkbox)
[Ext JS 4] 實(shí)戰之升級系列一[Ext jS 3-->Ext JS 4]
[Ext JS 4] 實(shí)戰之將chart導出為png, jpg 格式的文件
[Ext JS 4] 實(shí)戰之瀏覽器兼容
[Ext JS 4] 布局之實(shí)戰二 - 中間區塊不會(huì )自動(dòng)伸展 (tab)續
[Ext JS 4] 組件之圖表
[Ext JS 4]后臺自動(dòng)產(chǎn)生圖檔
[Ext JS 4]性能優(yōu)化
[Ext JS 7 ]7.5 自適應配置 - Responsive Configs
[Ext JS 7] 關(guān)聯(lián)(Association)
[Ext JS 7]事件(Event)
[Ext JS 7]ClassRequire錯誤解決
[Ext JS 7]的開(kāi)發(fā)模式
[Ext JS 7]基于NPM的開(kāi)發(fā)
[Ext JS ] 動(dòng)添切換字段的必填與非必填
[Ext JS4] 數據包
[Ext JS4系列]Ext JS4 入門(mén)
[Ext JS6] Grid不同列的關(guān)聯(lián)編輯
[Ext JS6] ViewControllers-視圖控制器
[Ext JS6]Ext.Template
[Ext JS6]Sencha Cmd
[Ext JS6]編碼規范
[Ext JS6]多類(lèi)型設備開(kāi)發(fā)
[Ext JS6]工作區-Workspace
[Ext JS6]路由(Routing)及使用
[Ext JS6]視圖模型和數據綁定
[Ext JS6實(shí)戰] Ajax獲取Tree Store
[Ext JS6實(shí)戰] Ext.XTemplate
[Ext JS6實(shí)戰]動(dòng)態(tài)數據綁定
[Ext JS] Sencha Cmd命令參考之二
[Ext JS] Sencha Cmd命令參考之一
[Ext JS] Group Grid-分組網(wǎng)格
[Ext JS] Group Grid-分組網(wǎng)格
[Ext JS]嵌套Grid的實(shí)現及注意事項
[Ext JS]SimXhr.js__dc=1659315492151_65 Uncaught TypeError問(wèn)題分析與解決
[Ext JS]Sencha Studio安裝與快速介紹之一
[Ext JS]textfield 添加 compositionstart、compositionupdate 和 compositionend
[Ext JS]圖片顯示方式
[ExtJS 6]Grid分頁(yè)工具欄無(wú)效問(wèn)題解決
[ExtJS6]ResponsiveColumn-自適應列布局
[Extjs 4] 類(lèi)系統
基于Ext JS的模塊化應用框架搭建及開(kāi)發(fā)
[Ext JS] 自行搭建遠端庫的包升級版本后找不到的問(wèn)題解決-The following versions are available
[Ext JS]鼠標移入移除時(shí)彈出和關(guān)閉窗口
[Ext JS]富文本編輯器 CKEditor與Ext JS的整合
[Ext JS]可編輯列Grid的全場(chǎng)景開(kāi)發(fā)
['Ext JS]Grid中的超鏈接列及其功能實(shí)現
[Ext JS]Ext JS + CKEditor+Spring Boot 實(shí)現編輯器圖片上傳
[Ext JS]介紹與快速入門(mén)1
[Ext JS]實(shí)現帶動(dòng)態(tài)數字的圖標
Spring Boot+Ext JS 實(shí)現圖形驗證碼
Ext JS介紹與快速入門(mén)2
Ext JS開(kāi)發(fā)基本環(huán)境準備與項目創(chuàng )建
[Ext JS]開(kāi)發(fā)模式及快速測試方式
[Ext JS]多類(lèi)型終端-電腦、移動(dòng)端(手機、平板)
[Ext JS]基于Ext JS的MVC/MVVM架構的應用開(kāi)發(fā)模式
[Ext JS]Ext JS的類(lèi)與類(lèi)體系
[Ext JS]Ext JS組件、容器與布局
[Ext JS]組件與容器的選擇與開(kāi)發(fā)
[Ext JS]Ext JS數據模型與數據封裝
[Ext JS]Ext JS的控制器類(lèi)型及使用
[Ext JS]說(shuō)透Ext JS的窗口及對話(huà)框用法
[Ext JS]說(shuō)透Ext JS的窗口及對話(huà)框用法
[Ext js]Grid行選擇的多種場(chǎng)景和實(shí)現方式
[Ext JS]Ext JS類(lèi)的繼承與混合
CmsWing
Spring Boot Ext JS準前后端框架應用的會(huì )話(huà)(Session)處理
## Spring Boot+Ext JS準前后端框架應用的會(huì )話(huà)(Session)處理 ### 準前后端分離的Session機制 Spring Boot + Ext JS的準前后端分離架構,Cmd 使用JSP作為模板文件進(jìn)行Build, 通過(guò)JSP 的Session對象進(jìn)行前后端連接的控制。 JSP 的Session機制大致是,在瀏覽器訪(fǎng)問(wèn)服務(wù)端的時(shí)候,服務(wù)端對針對此客戶(hù)端創(chuàng )建一個(gè)Session對象,此Session對象中可以存儲前端驗證通過(guò)的用戶(hù)相關(guān)信息,服務(wù)器將Session的ID發(fā)送個(gè)瀏覽器,瀏覽器保存該ID,在每次訪(fǎng)問(wèn)服務(wù)端的時(shí)候都會(huì )帶上此ID。有幾種狀況,該Session會(huì )失效: 服務(wù)端原因:超過(guò)后端設置的Session超時(shí)時(shí)間設置,瀏覽器端再使用該Session ID就會(huì )認為是無(wú)效。 Session的超時(shí)設置可以在應用服務(wù)器或是應用的配置文件中進(jìn)行設置。 客戶(hù)端原因: 在瀏覽器端清除了該Session ID,再此訪(fǎng)問(wèn)時(shí)從服務(wù)端獲取的就是一個(gè)新的Session 對象的ID,這個(gè)Session對象沒(méi)有用戶(hù)相關(guān)信息,除非重新登錄。 ### Session失效的場(chǎng)景 需要和服務(wù)端交互才能知道是否超時(shí),如果僅僅是前端視圖的切換,不調用后端服務(wù),則無(wú)法感知Session已經(jīng)失效。所以在典型的Ext JS應用中,會(huì )出現Session失效的場(chǎng)景有: 網(wǎng)格的數據的更新:Grid中的Store的更新,Store的load()方法被調用。 按鈕的點(diǎn)擊操作。一般而言,點(diǎn)擊某個(gè)按鈕,會(huì )通過(guò)Ajax調用后端的服務(wù)。 View Model模式的數據更新 ### Session失效的解決 Session失效的典型處理就是彈出用戶(hù)名/密碼輸入框,調用后端異步登錄方法登錄。 后端處理 但后端Session失效時(shí),后端無(wú)法通過(guò)前端的Session ID從對應的Session對象中獲取用戶(hù)信息, 后端統一拋出Session超時(shí)的返回即可,比如以下返回。 ```javascript { success:false, code:401, msg:'Session Time out'} ``` HTTP的401 代表是用戶(hù)對某資源沒(méi)有訪(fǎng)問(wèn)權限,可以借用這個(gè)返回碼定義應用的Session和認證相關(guān)的錯誤,也可以新增加一碼,比如: 4010 代表沒(méi)有登錄 4011 用戶(hù)名密碼錯誤 4012 Session超時(shí) ### 前端處理 針對Grid的更新和Ajax的請求時(shí)Session的失效狀況: Grid中數據的更新,其實(shí)是對應Store的重新加載,在定義該Store時(shí),可以通過(guò)該Store的Proxy進(jìn)行設置,添加Proxy的exception的事件的處理,在該事件對應的函數中,如果返回的是Session Timeout的返回, 則彈出用戶(hù)名/密碼輸入框進(jìn)行輸入。 Ajax呼叫則通過(guò)返回的響應判讀是否是Session Timeout的返回,如是則彈出用戶(hù)名/密碼輸入框進(jìn)行輸入。 ViewModel的處理和Ajax類(lèi)似, 同樣是判斷返回。 ### 是否回調 重新輸入用戶(hù)名/密碼之后,有的操作需要登錄后自動(dòng)調用之前未成功執行的,需要自動(dòng)執行,比如Grid的更新;有的操作則提示用戶(hù)重新點(diǎn)擊執行,比如點(diǎn)擊按鈕的操作。 因為Store和Ajax都是異步呼叫,所以某一時(shí)刻可能有多個(gè)操作觸發(fā)了重新登錄,而登錄框只能是最早觸發(fā)的那個(gè)彈出,后面的不需要彈出多個(gè)用戶(hù)/密碼輸入框。比如:Session超時(shí)時(shí)同時(shí)觸發(fā)了三個(gè)動(dòng)作,則第一個(gè)偵測的動(dòng)作彈出對話(huà)框,后面兩個(gè)不需要彈出, 但是,但是,這個(gè)兩個(gè)操作可能需要回調。所以,需要回調的部分需要放入一個(gè)隊列中,當成功登錄后,這個(gè)隊列中需要回調的方法依次執行。 ### 主要代碼示例片段 Store的處理 getProxyCfg:function(url,store,method,contentType,paramsAsJson){ var proxyCfg = { type : 'ajax', url : url, actionMethods:{ read : method!=null?method:'GET' }, reader: { type: 'json', rootProperty: 'datas' },listeners:{ exception:function( thisProxy, response, operation, eOpts ){ var obj = Ext.decode(response.responseText); if(obj.code!=null&&obj.code.length>3&&obj.code.substr(0,3)=="401"){ if(store.lastOptions!=null&&store.lastOptions.callback!=null&&typeof(store.lastOptions.callback)=='function') { var callbackFunc = store.lastOptions.callback; Ext.getApplication().getController("main").login(obj.msg,function(){store.load(callbackFunc)}); }else{ Ext.getApplication().getController("main").login(obj.msg,function(){store.load()}); } } } } }; Ajax呼叫共用方法 ```javascript callServiceWithSesChkAndResp:function(url, method, paramObj, callbackFunc, isJsonParam,moreParamObj,iCount){ var me = this; if(iCount==null) iCount = 1; var requestCfg = { url : url, method : method, // params : paramObj, success : function(response, opts) { if(me.isSessionInvalidResponse(response)){ var obj = Ext.decode(response.responseText); Ext.getApplication().getController("main").login(obj.msg,function(){ me.callServiceWithSesChkAndResp(url, method, paramObj, callbackFunc, isJsonParam,moreParamObj,iCount++); }); }else{ if (obj != null && obj.success != null && obj.success == false) { Ext.Msg.alert('Fail', obj.msg); }else{ if (callbackFunc != null && typeof (callbackFunc) === "function") { callbackFunc(response); } } } }, failure : function(response, opts) { console.log('server-side failure with status code ' + response.status); } }; if (paramObj != null) { if (isJsonParam != null && isJsonParam === true) { requestCfg.jsonData = paramObj; } else { requestCfg.params = paramObj; } } Ext.Ajax.request(requestCfg); } ```
← 上一篇:工業(yè)ERP系統五十問(wèn)...
下一篇:Ext JS開(kāi)發(fā)大全... →
網(wǎng)站導航
首頁(yè)
動(dòng)態(tài)
方案
案例
專(zhuān)欄
期刊
聯(lián)系我們