SpringBoot2構建基于RBAC權限模型的駕校代理小程序后端

本項目是使用SpringBoot2構建的一套基于RBAC權限模型的后臺管理系統,前端是微信小程序。

項目地址:

github.com/fuyunwang/D…

項目的緣由

最近接了個外包,主要是針對于駕校開發一個代理小程序。目的是為了方便駕校的管理來招攬學員,同時方便維護學員和代理信息。

項目介紹

項目業務功能介紹

本項目的業務需求比較少,是一個傳統項目,核心的業務點是權限管理,這里我就采用比較規范的RBAC權限模型來開發。由于項目比較小,這里我就沒有采用Shiro或SpringSecurity等權限管理框架,而是自己使用過濾器開發了一套。我認為這可以算是權限管理的雛形,如果有更復雜的權限管理需求,可以很方便的基于此擴展。

  1. 管理員角色為最高權限,賬戶為admin,初始密碼為123456。
  2. 管理員可以創建一級代理、添加學員。
  3. 一級代理可以創建二級代理、添加學員。但是一級代理創建的代理和學員初始為未審核狀態,只有超管才能審核
  4. 二級代理只有在審核通過后才能添加學員且二級代理不能創建代理。
  5. 針對每個代理獲取其下的所有學員,如果是超管或一級代理獲取其添加學員的同時獲取其下子代理的學員。
  6. 排行榜系統。根據每個代理所添加的代理或學員數(包括子代理的學員數)來確定代理的業績。獲得日業績排行和總業績排行
  7. 針對排行榜中的代理進行點贊和評論。
  8. 批量導出指定代理下的學生數據
  9. 刪除指定代理,并將代理下的學生添加到父級代理上

技術實現

  1. 首先認證方面,我這里仍然采用jwt token的認證方式。這里我默認實現了記住密碼的功能。即用戶第一次登陸成功之后返回一個token在response header中,該token的有效期為2小時,服務器端我保存一個有效期為1周的refresh token。用戶在2個小時之內登錄不會返回token,2個小時和一周之內第一次攜帶過期token我會返回新的token在response header。一周之外refresh token失效,這里需要用戶重新登錄。 這里我也是借鑒了別人的思路:segmentfault.com/a/119000001…

  2. 權限管理方面,我這里共用了4張表,其實基準的RBAC權限模型最少要5張表。這里比較簡單,所以我主要是用戶表、角色表、權限表以及權限角色表。用戶和角色是一對一的關聯關系、角色和權限是一對多的關系。表結構如下:

  1. Filter實現權限過濾。這里比較簡單,但是記錄一個比較雞肋的事。就是在SpringBoot中使用Filter時,SpringBoot提供了@ServletComponentScan(basePackages = "com.beautifulsoup.driving")@WebFilter@Order注解,但是這里的@Order并不能實現多個Filter的順序性,無奈我只能采用FilterRegistrationBean來注入Filter,同時請求第一步進入的是Filter且其不被Spring管理,故而不能通過@Autowired注解只能構造方法注入。Filter內部用ThreadLocal保存用戶信息,校驗用戶的權限,ThreadLocal作為線程級別對象,對于SpringSecurity中的用戶信息保存也是基于此的。
  2. 數據訪問層,這里我使用的Spring Data。包括Spring Data Jpa和Spring Data Mongodb。傳統項目沒必要針對SQL做太多優化,這里我就純ORM。
  3. 排行榜系統,仍然是記錄用戶添加代理和學員之后記錄入Redis。ZSET記錄用戶的日業績和總業績,然后將前10名從Hash中返回,提升效率。
  4. 點贊仍然使用Redis維護代理的點贊數、評論數據入Redis。
  5. 導出Excel,方便管理員維護代理和學員數據,這里采用Apache POI

小程序界面展示:

接口文檔:

文檔地址:

github.com/fuyunwang/D…

例子:

技術包括

  1. Spring Boot 2.1.3

  2. Spring Data Jpa

  3. Spring Data Redis

  4. Spring Data Mongodb

  5. Spring Boot Mail

  6. Swagger

  7. Quartz

  8. JWT Token

  9. FastDFS

  10. apache poi

要點

  1. 熱點數據入Redis,提高SQL的查詢性能
  2. 認證采用Jwt Token+Refresh Token+黑名單策略,提高用戶體驗
  3. 權限管理采用規范的RBAC權限模型
  4. 點贊、排行等數據入Redis,每天進行一次Quartz任務調度,Redis中數據落庫
  5. 評論、發布公告等信息入Mongodb,便于存儲、操作

轉載于:https://juejin.im/post/5ca86a07e51d4578e5153a9b

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251980.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

while read line的問題

循環中的重定向或許你應該在其他腳本中見過下面的這種寫法&#xff1a;while read linedo…done < file剛開始看到這種結構時&#xff0c;很難理解< file是如何與循環配合在一起工作的。因為循環內有很多條命令&#xff0c;而我們之前接觸的重定向都是為一條命令工作的。…

Linemod;理解

Linemod 代碼筆記 2019年03月11日 16:18:30 haithink 閱讀數&#xff1a;197 最近了解到 Linemod 這個模板匹配算法&#xff0c;印象不錯 準備仔細學習一下&#xff0c;先做點代碼筆記&#xff0c;免得后面不好回顧 目前的筆記基本上把 核心流程都分析得比較清楚了&#xff0…

Swift3中數組創建方法

轉載自&#xff1a;http://blog.csdn.net/bwf_erg/article/details/70858865 數組是由一組類型相同的元素構成的有序數據集合。數組中的集合元素是有 序的&#xff0c;而且可以重復出現。 1 數組創建 在Swift語言中&#xff0c;數組的類型格式為&#xff1a; Array<ElementT…

BZOJ 5249: [2018多省省隊聯測]IIIDX(貪心 + 線段樹)

題意 這一天&#xff0c;\(\mathrm{Konano}\) 接到了一個任務&#xff0c;他需要給正在制作中的游戲 \(\mathrm{《IIIDX》}\) 安排曲目 的解鎖順序。游戲內共有\(n\) 首曲目&#xff0c;每首曲目都會有一個難度 \(d\) &#xff0c;游戲內第 \(i\) 首曲目會在玩家 Pass 第 \(\lf…

手眼標定

Eye-in-hand和Eye-to-hand問題求解和實驗 2018年12月07日 00:00:40 百川木易 閱讀數 3018 2018/12/5 By Yang Yang&#xff08;yangyangipp.ac.cn&#xff09; 本文所有源碼和仿真場景文件全部公開&#xff0c;點擊Gitee倉庫鏈接。 文章目錄 問題描述Eye-in-hand問題求解公式…

RNN總結

RNN既可以表述為循環神 經網絡&#xff08;recurrent neural network&#xff09;&#xff0c;也可以表述為遞歸神經網絡&#xff08;recursive neural network&#xff09;&#xff0c;前者一般用于處理以時間序列為輸入的問題&#xff08;比如把一個句子看成詞組成的序列&…

Problem 2. number題解

number&#xff1a;數學二分圖匹配 首先&#xff0c;如果S<N,那么S1&#xff0c;S2...N這些數直接放在S1,S2...N的位置上(如果其他數x放在這些位置上面&#xff0c;這些數不放在對應位置&#xff0c;那么x一定能放在這些數放的位置&#xff0c;所以直接交換即可)所以可以直接…

SSD列子

一、介紹 本博文主要介紹實現通過SSD物體檢測方式實現工件裂紋檢測。裂紋圖像如下所示&#xff1a; 二、關于SSD算法 具體算法不再闡述&#xff0c;詳細請參考&#xff1a; https://blog.csdn.net/u013989576/article/details/73439202 https://blog.csdn.net/xiaohu2022/arti…

linux硬鏈接與軟鏈接

Linux 系統中有軟鏈接和硬鏈接兩種特殊的“文件”。 軟鏈接可以看作是Windows中的快捷方式&#xff0c;可以讓你快速鏈接到目標檔案或目錄。 硬鏈接則透過文件系統的inode來產生新檔名&#xff0c;而不是產生新檔案。 創建方法都很簡單&#xff1a; 軟鏈接&#xff08;符號鏈接…

int轉時間

int轉時間 public static string FormatDuration(int duration) { if (duration 0) return "00:00:00"; int hours duration / 3600; int minutes duration % 3600 / 60; int seconds duration % 3600 % 60; string _hours hours.ToString("00") &qu…

企業級區塊鏈現狀研究報告:小企業的投資總額是大企業的28倍

根據企業級區塊鏈現狀研究報告表明&#xff0c;當前企業采用區塊鏈技術的勢頭正在逐步增強。參與該報告的企業表示&#xff0c;區塊鏈投資今年共增長了 62% &#xff0c;預計到 2025 年區塊鏈將成為主流技術。其中&#xff0c;有 28% 的企業正在積極開展區塊鏈發展計劃。現在看…

特征匹配

Python 使用Opencv實現圖像特征檢測與匹配 2018-06-13 11:36:58 Xy-Huang 閱讀數 19203更多 分類專欄&#xff1a; Python 人工智能 版權聲明&#xff1a;本文為博主原創文章&#xff0c;遵循 CC 4.0 BY-SA 版權協議&#xff0c;轉載請附上原文出處鏈接和本聲明。 本文鏈接…

bzoj 1015 并查集

代碼&#xff1a; //這題可以反著想&#xff0c;把要去掉的點倒著處理變成往圖中一個一個的加點&#xff0c;然后用并查集處理聯通快就好了。 #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; const in…

頁面中切換echarts主題

要做的效果是&#xff1a;點擊下拉框切換echarts主題 下面是效果圖&#xff1a; 項目環境&#xff1a; vue ts es6 echarts(4.2.1) 步驟 安裝依賴&#xff0c; npm install echarts -S / yarn add echarts -S引入主題 參考鏈接選擇下拉框中的主題時&#xff0c;拿到圖表主題…

畫極線

OpenCV學習日記5 2017-05-27 10:44:35 1000sprites 閱讀數 2339更多 分類專欄&#xff1a; 計算機視覺 版權聲明&#xff1a;本文為博主原創文章&#xff0c;遵循 CC 4.0 BY-SA 版權協議&#xff0c;轉載請附上原文出處鏈接和本聲明。 本文鏈接&#xff1a;https://blog.cs…

Win10開啟Administrator超級管理員賬戶

方法1 1、在系統的開始菜單上&#xff0c;我們單擊鼠標右鍵&#xff0c;然后選擇計算機管理打開進入 2、打開的計算機管理窗口&#xff0c;點擊本地用戶和組中的用戶打開&#xff0c;然后點擊右側的Administrator賬戶&#xff0c;雙擊鼠標打開進入 3、打開的屬性窗口中&#xf…

Mysql異常問題排查與處理——mysql的DNS反向解析和客戶端網卡重啟

中午剛想趴一會&#xff0c;不料鍋從天降&#xff01;&#xff01;&#xff01;Mysql連不上了。。。。。。。 現象如下&#xff1a; 現象1&#xff1a;登錄mysql所在服務器&#xff0c;連接MySQL 成功&#xff1b; 現象2&#xff1a;通過客戶端遠程連接MySQL&#xff0c;返回失…

最近很火的MySQL:拋開復雜的架構設計,MySQL優化思想基本都在這

優化一覽圖 優化 筆者將優化分為了兩大類&#xff1a;軟優化和硬優化。軟優化一般是操作數據庫即可&#xff1b;而硬優化則是操作服務器硬件及參數設置。 1、軟優化 1&#xff09;查詢語句優化 首先我們可以用EXPLAIN或DESCRIBE(簡寫:DESC)命令分析一條查詢語句的執行信息。 例…

【讀書筆記】《深入淺出Webpack》

Webpack版本 分析版本為3.6.0 4.0為最近升級的版本&#xff0c;與之前版本變化較大&#xff0c;編譯輸出的文件與3.0版本會不一致&#xff0c;目前項目中使用的版本3.0版本&#xff0c;所以基于3.0版本進行分析學習。 Webpack構建流程 初始化&#xff1a;啟動構建&#xff0c;讀…

《JAVA與模式》之橋梁模式

在閻宏博士的《JAVA與模式》一書中開頭是這樣描述橋梁&#xff08;Bridge&#xff09;模式的&#xff1a; 橋梁模式是對象的結構模式。又稱為柄體(Handle and Body)模式或接口(Interface)模式。橋梁模式的用意是“將抽象化(Abstraction)與實現化(Implementation)脫耦&#xff0…