天天看點

SpringSecurity之——權限管理與SpringSecurity概述

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

繼續閱讀