1. 為什麼需要權限管理
- 安全性:誤操作、人為破壞、資料洩露等
- 資料隔離:不同權限能看到及操作不同的資料
- 明确職責:營運、客服等不同角色,leader和dev等不同級别
2.權限管理核心
- 使用者-權限:人員少,功能固定,或者特别簡單的系統
- RBAC(Role-Based Access Control):基于角色的權限通路控制,使用者-角色-權限
3. 理想中的權限管理
- 能實作的角色級權限 RBAC
- 能實作功能級、資料級權限
- 簡單、易操作、能夠應對各種需求
4. 相關操作界面
- 權限管理界面、角色管理界面、使用者管理界面
- 角色和權限關系維護界面、使用者和角色關系維護界面
5. 開源權限管理項目
- Spring Security
- Apache Shiro
6. SpringSecurity
6.1 常用認證模式
- basic 是http1.0開始的、針對特定的資源需要提供使用者名和密碼才可以通路。使用者名:密碼 以base64編碼,浏覽器會在封包頭部加入base64編碼的内容,伺服器解析出這些資訊并且認證通過才可以通路。缺點:無狀态,導緻每次通信都需要要帶上認證資訊。傳輸不安全,認證資訊用的是base64位編碼,基本上屬于明文傳輸,很容易對封包截取盜用認證資訊
- Digest 用來替代原來的basic模式、與basic不同的是、浏覽器會對使用者名、密碼、http方法、對請求資源的uri等組合後進行md5加密再把計算得到的結果發送給伺服器,伺服器擷取到資訊後同樣會對使用者名密碼http方法等組合運算後再次以結果比較,如果相同就是認證通過。避免了明文傳輸
- X.509 證書認證
- LDAP 是輕量級的目錄通路協定
- Form 基于表單的驗證
6.2 常用權限攔截器講解
- SecurityContextPersistenceFilter 位于過濾器的頂端、是第一個起作用的過濾器。第一個用途是保證使用者的session已經存在了SpringSecurity上下文中,第二個使用者是在所有過濾器執行完後清空 SecurityContextHolder的内容
- LogoutFilter 處理登出請求
- AbstractAuthenticationProcessingFilter 處理form登入的過濾器
- DefaultLoginPageGeneratingFilter 用來生成一個預設的登入頁面
- BasicAuthenticationFilter 進行basic驗證的
- SecurityContextHolderAwareRequestFilter 用來包裝使用者的請求
- RememberMeAuthenticationFilter 記住我功能 依賴Cookie實作
- AnonymousAuthencationFilter 當使用者未登入時預設配置設定匿名權限
- ExceptionTranslationFilter 處理filterSecurityInterceptor中抛出的異常
- SessionManagementFilter 防止會話攻擊
- FilterSecurityInterceptor 包含使用者的權限控制
- FilterChainProxy 安裝順序來調用一組filter