一.后台管理系統的大致功能:
1. 登錄:對用戶身份進行認證;
2. 系統管理:可以新增、修改、刪除、查詢用戶;
3. 角色管理:可以新增、修改、刪除、查詢角色;
4. 菜單管理:可以新增、修改、刪除、查詢菜單;該功能在前后端分離項目開發中,對應的是前端的動態路由。
5. 權限管理:可以新增、修改、刪除、查詢權限;該功能定義的是某一功能模塊下的按鈕,在有一些系統中菜單管理和權限管理可以合並為一個,統稱為權限管理。
6. 數據庫備份:為保證您的數據安全本系統采用了數據庫備份功能;
7. 上傳管理:管理你增加產品時上傳的圖片及其他文件;
8. 網站配置:可以修改網站基礎信息的配置,如:標題、關鍵字、描述、備案號等;
9. 其它業務功能
在前后端分離中,解決用戶認證與授權的問題主要是通過無狀態的Session管理機制來進行:
token失效怎么辦?寫一半文章,token過期,后端會返回來狀態碼,那么我們就需要在響應攔截那里,根據狀態碼,再獲取一個新的token,再重新調用接口
二.無狀態Session管理機制
1.什么是Session?
在網絡應用中,Session被稱為“會話控制”。(session和cookie是一對,這里的session不是sessionstorage)
Session對象存儲特定用戶會話所需的信息。
當用戶在應用程序的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。
當用戶請求來自應用程序的 Web頁時,如果該用戶還沒有會話,則Web服務器將自動創建一個 Session對象。
當會話過期或被放棄后,服務器將終止該會話。Session 對象最常見的一個用法就是存儲用戶的首選項。
例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在Session對象中。
有關使用Session 對象的詳細信息,注意會話狀態僅在支持cookie的瀏覽器中保留。
為什么需要Cookie的支持呢?
因為Session是存儲在服務器端的數據,要區分具體數據的所屬關系,那就需要建立一個關聯關系,相當於人和姓名。
只不過在Session的機制中,姓名對應的是Session ID,而具體的人是數據,那當客戶端首次進入服務器端時,服務器端為該客戶端,生成一個ID,並告知客戶端(將ID存儲在Cookie中),這樣服務器端和客戶端就都知道自己的ID了,接下來的操作,服務器端只要獲取Cookie中的ID,就能知道存儲的數據。
2.無狀態Session管理機制
在前后端分離開發時,由於后端程序並不知道前端的種種操作,如跳轉頁面、是否有權限,但是后端程序又掌握着整個系統的安全、數據、接口等生殺大權,但是后台又不能把用戶信息存儲在Session中,因為Session是在支持Cookie的瀏覽器中才可以保留,因為后端程序是依靠一個Session ID來進行識別用戶的。
但是現在前后端分離,全程都使用Ajax來請求數據,並且有的瀏覽器可能會把Cookie禁用了,這就會導致服務器端識別不了用戶的身份。
由於這個原因,就迎來了無狀態的Session機制,所謂的無狀態Session管理機制:就是當用戶帶着身份數據進行登錄時,登錄成功后,服務器端會使用登錄成功的用戶信息,進行特定規則的加密,得出一個加密的串,從而把加密的串返回給前端程序。
接下來的操作,前端只需要每次都攜帶着這個加密的串去請求后端接口,后端在獲取到加密的串時進行特定規則解密,解密出來的數據就是用戶的身份數據,接着判斷該數據是否有效。從而決定是否進行接下來的操作。具體流程圖如下:
三. JWT 令牌
1.JWT 是什么?
JSON Web Token(JWT)是一個開放的行業標准(RFC 7519),它定義了一種緊湊且獨立的方式,用於在各方之間作為JSON對象安全地傳輸信息。此信息可以通過數字簽名進行驗證和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公鑰/私鑰對進行簽名,防止被篡改。
JWT 官網:https://jwt.io 想深入了解的可網站查看
JWT 的構成:JWT 有三部分構成:頭部、有效載荷、簽名
例如:aaaaa.bbbbbb.cccccccc
頭部:包含令牌的類型(JWT) 與加密的簽名算法(如 SHA256 或 ES256),Base64編碼后加入第一部分。
有效載荷:通俗一點講就是token中需要攜帶的信息都將存於此部分,比如:用戶id、權限標識等信息。
注:該部分信息任何人都可以讀出來,所以添加的信息需要加密才會保證信息的安全性
簽名:用於防止 JWT 內容被篡改, 會將頭部和有效載荷分別進行 Base64編碼,編碼后用 . 連接組成新的字符串,然后再使用頭部聲明的簽名算法進行簽名。在具有秘鑰的情況下,可以驗證JWT的准確性,是否被篡改。
2. JWT 優缺點
JWT 的優點:
1. JWT 基於 json,非常方便解析。
2. 可以在令牌中自定義豐富的內容,易擴展。
3. 通過非對稱加密算法及數字簽名技術,JWT 防止篡改,安全性高。
4. 資源服務器使用 JWT 可以不依賴認證服務器,即可完成授權。 oauth2
JWT 的缺點:
1. JWT令牌較長,占存儲空間比較大,但是用戶信息是有限的,所以在可接受范圍。
明白了上述對JWT的介紹和優缺點,我們Session無狀態的令牌就使用JWT來進行生成。
在前后端分離項目中,前端並不需要對JWT令牌進行解密,只需要將JWT令牌存儲在指定的地方即可。
3. 什么是身份認證?
身份認證指的是用戶去訪問系統資源時,系統要求驗證用戶的身份信息,用戶身份合法才訪問對應資源。
常見的身份認證一般要求用戶提供用戶名和密碼(或者手機號,微信,qq等等)。系統通過校驗用戶名和密碼來完成認證過程。
4. 什么是用戶授權
當身份認證通過后,去訪問系統的資源,系統會判斷用戶是否擁有訪問該資源的權限,只允許訪問有權限的系統資源,沒有權限的資源將無法訪問,這個過程叫用戶授權。
比如 會員管理模塊有增刪改查功能,有的用戶只能進行查詢,而有的用戶可以進行修改、刪除。一般來說,系統會為不同的用戶分配不同的角色,而每個角色則對應一系列的權限。
四.vue-element-admin
vue-element-admin 是一個后台前端解決方案,它基於 vue 和 element-ui實現。它使用了最新的前端技術棧,內置了 i18n 國際化解決方案,動態路由,權限驗證,提煉了典型的業務模型,提供了豐富的功能組件,它可以幫助你快速搭建企業級中后台產品原型。相信不管你的需求是什么,本項目都能幫助到你.
git clone https://gitee.com/panjiachen/vue-element-admin.git
目錄講解 src : api : 接口js配置 assets : 靜態資源(該目錄會被webpack打包,public下的不會被webpack打包) components : 自定義組件 BackToTop : 返回首頁 項目需要 Breadcrumb : 面包屑 項目需要 Charts : 圖表 DndList : 拖拽列表 DragSelect : 拖拽選擇 Dropzone : 拖拽上傳 ErrorLog : 錯誤日志 GithubCorner : Github Hamburger : 頭部切換左側菜單的按鈕 項目需要 HeaderSearch : 頭部搜索 項目需要 ImageCropper : 圖片裁剪 JsonEditor : JSON編輯器 Kanban : 看板 MarkdownEditor : Markdown 編輯器 MDinput : Markdown 輸入 Pagination : 分頁 (有bug,不好用) PanThumb : 縮略圖 RightPanel : 右側容器 項目需要 Screenfull : 全屏 項目需要 Share : 分享 SizeSelect : 尺寸選擇 項目需要 Sticky : 吸附(當頁面滾動到指定位置,會吸附到指定的位置) SvgIcon : Svg圖標 項目需要 TextHoverEffect : 文本滑過效果 ThemePicker : 主題選擇器 Tinymce : 富文本編輯器 項目需要 Upload : 上傳 UploadExcel : 上傳Excel directive : 自定義指令 filter : 過濾器 icons : 圖標 layout : 布局相關的文件 router : 路由相關的文件 store : Vuex styles : 樣式代碼 utils : 工具相關的文件(重點) vendor : 導出生成相關 view : 頁面文件(我們將來的頁面都要放在views里) charts : 圖表 clipboard : 剪貼板 components-demo : 組件演示 dashboard : 首頁(儀表盤) 項目需要 documentation : 文檔 error-log : 錯誤日志 error-page : 錯誤頁面 項目需要 example : 實例 excel : Excel guide : 指南 icons : 圖標 項目需要 login : 登錄 項目需要 nested : 嵌套路由 pdf : pdf permission : 權限 profile : 個人信息 項目需要 qiniu : 七牛雲配置 redirect : 重定向 tab : 標簽 table : 表格 theme : 主題 zip : 壓縮 permission.js : 權限、路由攔截(導航守衛) settings.js : 全局配置信息 .env.development : 開發環境配置文件 .env.production : 生產環境配置文件