首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

權限系統設計(下):認證授權模型、RBAC 與資源攔截實戰

     編輯:Java 綜合教學

權限系統設計(下):認證授權模型、RBAC 與資源攔截實戰

什麼是權限管理?

凡涉及用戶的系統皆需權限管理,核心目標:按安全策略控制用戶僅訪問被授權資源(菜單、頁面、API、按鈕等)。包含兩大模塊:

  • 用戶認證:驗證身份合法性(登錄)
  • 用戶授權:認證通過後,控制資源訪問權限

用戶認證流程

用戶認證流程圖

常見驗證方式:

  1. 用戶名 + 密碼(最通用)
  2. 手機號 + 驗證碼(無密登錄)
  3. 數字證書(高安全場景)

授權核心:數據庫模型(5 表核心)

權限數據模型 ER 圖

表名核心字段說明
subject (主體/用戶)id, username, password系統訪問主體
permission (權限/資源)id, name, resource_url可被授權的資源定義
role (角色)id, name權限載體,如「項目經理」「普通員工」
role_permissionrole_id, permission_id角色-權限多對多關聯
subject_rolesubject_id, role_id用戶-角色多對多關聯

註:資源表可合併至 permission 表,避免冗餘。

授權模式對比

❌ 基於角色的訪問控制 (RBAC 簡陋版)

if (user.role == "pm") { /* 訪問 */ }
if (user.role != "pm") { /* 禁止 */ }

缺點:權限變更需改代碼、角色爆炸、難維護。

✅ 基於資源的訪問控制 (RBAC 標準版)

if (user.hasPermission("project:create")) { /* 訪問 */ }
else if (user.hasPermission("admin:*")) { /* 訪問 */ }

優勢:權限配置化、無需改代碼、細粒度控制、支持動態授權。

URL 攔截實現方案

以 Spring MVC 攔截器為例:

  1. 配置私有 URL 列表需攔截驗證
  2. 攔截器中檢查 Token/Session 有效性,無效則重定向登錄或返回 401 JSON
  3. 驗證通過後,檢查用戶權限集合(首次查庫緩存至 Redis/Session)是否包含請求資源
  4. 無權限返回 403

成熟框架選型

  • Spring Security:功能全但重、學習曲線陡、Spring 官方現推薦遷移
  • Apache Shiro:輕量、API 簡潔、不綁定 Spring、推薦新項目使用

下一步預告

後續將深入 Shiro 實戰:Realm 實現、權限註解、標簽庫、Session 管理、RememberMe、OAuth2 整合等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved