用session做權限控制


一個需要用戶進行登錄的網站,基本上都會設置用戶權限,對不同的用戶進行權限控制。例如:一個網站肯定會有一個管理員管理着普通的用戶,普通的用戶不可能對其他用戶有着類似於增刪改查等操作,這樣網站都亂了……,一個網站做基本要做好邏輯結構,還要管理好所有用戶的權限,不同種用戶對應着不同的權限,讓這些用戶有一個層級的概念。

在網上搜索權限控制會接觸到shiro,這個可以說是一個安全框架,用來做權限控制非常方便的,這個以后再看。做權限控制我最先想到的使用session來做,session對象,一個用戶一次登錄對應一個session,這樣我們可以把用戶的權限從數據庫中查出來,保存在當前這個用戶的session對象中,這樣在打開每個網頁的時候,首先判斷當前用戶權限是什么,屬於什么等級,在頁面上做出判斷,哪些內容是可以顯示給當前用戶,哪些不可以顯示,這樣有些需要權限等級高的操作頁面內容就可以選擇顯示給用戶了。

在用戶表中有一個字段用來記錄着當前用戶的權限(其實這里應該記錄用戶的權限列表,為什么?因為用戶的權限總是有些交叉的,比如說設置一個普通用戶對應的的權限可以進行的操作有修改登錄密碼,管理員對應的權限也可以對用戶的密碼進行修改,如果單一的設置普通用戶的權限為1,管理員權限為5,我們在后台判斷權限為5的用戶可以修改密碼,那普通用戶的修改密碼的操作就不能實現了,最好的方法就是每個用戶對應一個權限列表,權限列表中對應着幾種不同的權限編碼,這樣對於前面說的那種權限的交叉就可以很好的解決了)這里為了實現簡單的用戶權限控制,並沒有采用權限列表這種方式,只是簡單的設置某個權限為幾(一個int類型的值)。

說了這么多,我們有一個用戶表,表中記錄着用戶的基本信息,還有一個字段用來記錄用戶的權限標號(一個int類型的值存儲),從1-5權限從小到大對應,一個登錄頁面,一個主頁(登錄成功跳轉到主頁),在用戶輸入用戶名和密碼的時候,會去數據庫中查找有無此用戶名和密碼對應的用戶,返回回來,我們在執行完這個操作的時候,再定義一個方法:在用戶表中把當前登錄用戶的權限標號查出來,放到session中即可。

下面是一個ssm三個框架整合的項目,在mybatis的xml的配置文件中分別定義了登錄查詢的sql語句和查詢權限的sql語句


在controller中寫入邏輯代碼,登錄查詢之后調用查詢用戶權限,這里的方法都是由spring注入的,確實很好用,通說現在都用spring全家桶了……

if中判斷數據庫查出來的是否有數據,也就是用戶名密碼是否正確,正確查出權限標號存入session,跳轉到主頁index頁面,否則(用戶名密碼輸入錯誤)返回login登錄頁面

在jsp頁面中用jstl標簽判斷當前權限,選擇顯示頁面中的信息,如果條件成立執行標簽中的內容(顯示內容),不成立不顯示,就是判斷用戶權限標號是否是5

一個a用戶,還有一個b用戶,a用戶權限是1,b用戶權限是5,運行項目,登錄

a用戶不顯示,b用戶顯示左面分類欄(不放圖了,想想就可以了,項目放在github上還在寫,)

也可以用model來存儲這個權限標號,后期會改成model,這樣代碼會簡單些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM