程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 權限設計(下),權限設計(

權限設計(下),權限設計(

編輯:JAVA綜合教程

權限設計(下),權限設計(


什麼是權限管理

一般來說,只要有用戶參與的系統,那麼都要有權限管理,尤其是一些後台的管理系統,

權限管理可以實現對用戶訪問系統的控制,按照安全規則或者相關策略的控制,可以使用戶訪問到只屬於自己被授權的相關(比如菜單,或者頁面資源)

權限管理包括用戶認證和授權兩模塊

用戶認證

用戶認證,說白了就是登錄的時候進行的驗證,驗證用戶身份合法性。

最常見的用戶身份驗證的方式:

1、用戶名 + 密碼

2、手機號 + 驗證碼

3、證書驗證

來看一下流程圖:

 

 

用戶授權

用戶授權,淺白點講就是權限訪問控制,在用戶認證通過後,系統對用戶訪問資源進行控制,用戶具有資源的訪問權限方可訪問對於的資源

 

數據庫模型

上篇文章中講到了5張表,其實是由6張表而來,但是由於第六章表資源是可以整合的,所以可以避免冗余而采用了5張表,最簡單的權限控制是至少由5張表來構成的

主體(賬號、密碼)

權限(權限名稱、資源名稱、資源訪問地址)

角色(角色名稱)

角色和權限關系(角色id、權限id)

主體和角色關系(主體id、角色id)

 

分配權限

用戶需要被分配到相應的權限才可訪問相應的資源,這些權限信息需要保存

把用戶信息、權限管理、用戶分配的權限信息寫到數據庫(權限數據模型)

 

 

基於角色的訪問控制

就是判斷用戶是否是項目經理還是普通員工,訪問的資源就不同

比如

if (user.role = [pm]) {

// 訪問

}

if (user.role != [pm]) {

// 訪問

}

這麼做沒問題,但是不容易維護,一旦權限變更,那麼就要變更代碼

基於資源的訪問控制

if (user have [pm]) {

// 訪問

} else if (user have [boss]) {

// 訪問

}

這麼做只要針對user配置權限,把對應的資源給他,那麼就能訪問,不需要每次修改代碼,增加了可維護性

 

基於url攔截的方式實現

舉個栗子:使用springMVC攔截器實現

攔截對應url,url配置一個私有攔截list,攔截到的list必須進行驗證,

進入攔截器驗證後查看是否存在token信息,如果不存在,攔截返回到web登錄頁面,或者json錯誤信息給手機端

同時驗證的時候針對資源,需要判斷是否能夠訪問,可以第一次查詢數據庫的資源信息緩存到session或者redis中

使用權限管理框架實現

1、spring security (目前連spring自己都拋棄了這個框架,因為太重了,現在擁抱了Apache Shiro)

2、Shiro (to be continued...)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved