webgate單點登錄原理

項目代碼 會不定期更新,之後會拆成 前段mvvm ,後端mvc 框架,如果需要持續關注的同學們,請打開鏈接後,點擊 fork

項目地址:https://github.com/Wenhaoran/webgate

在用戶登錄系統後,生成一個隨機數 ticket , 並  根據當前 賬戶登錄信息,以及 當前賬戶的默認角色信息, 保存到全局 map中。

key = ticket ,value = 賬戶+角色。

查詢當前角色對應的菜單按鈕,並 拼接 菜單的 html 時,鏈接增加後綴 ?ticket =   剛纔生成的隨機數。


在點擊菜單,訪問系統時,請求會被攔截, 獲取 項目名稱(webgate),路徑名稱(/pages/component/form/index),ticket ,調用 接口,查詢 當前 ticket是否存在。如果不存在,跳轉登錄界面,如果 ticket存在,則會驗證,當前ticket 對應的角色,是否有權限,訪問 當前項目的 當前路徑,如果 沒有權限,則 顯示 權限不足界面,如果有權限,則顯示正常界面。

至於 鏈接最後的 &pt_rtype=m ,是在 權限不足的時候進行判斷,是否過濾此次請求,因爲, 過濾器會攔截所有請求, 而 有些請求,是 執行查詢語句,並不是請求頁面,所以,應該進行選擇性的攔截,&pt_rtype=m ,就是進行 選擇性攔截控制。

下面粗略說代碼實現,如需看具體實現,請去github下載代碼:

CommonController login , 接收登錄請求的方法,判斷用戶是否存在,用戶名是否正確,生成ticket 的方法,並把當前賬戶的,角色,等等信息放到session中。

PermissionFilter doFilter ,攔截所有請求,獲取 項目名,路徑,以及 ticket ,調用接口,判斷是否有權限。

RestController 整個controller 所有方法,均爲接口方法, 其中 getPermissionsBak 方法,爲驗證權限的方法。

Service 中的 WebMenuList 類,爲,拼接 菜單html類。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章