Spring Security總結

簡介

       Spring Security是一個強大的和高度可定製的身份驗證和訪問控制框架,它的前身是 Acegi Security。Spring Security着重於爲Java應用程序提供身份驗證和受權。提供了一組能夠在Spring應用上下文中配置的Bean,充分利用了Spring IoC和AOP(面向切面編程)功能,爲應用系統提供聲明式的安全訪問控制功能,減小了爲企業系統安全控制編寫大量重複代碼的工做。git

核心概念

Spring Security是如何完成身份認證的?

  • 用戶名和密碼被過濾器獲取到,封裝成Authentication,一般狀況下是UsernamePasswordAuthenticationToken這個實現類。
  • AuthenticationManager 身份管理器負責驗證這個Authentication
  • 認證成功後,AuthenticationManager身份管理器返回一個被填充滿了信息的(包括上面提到的權限信息,身份信息,細節信息,但密碼一般會被移除)Authentication實例。
  • SecurityContextHolder安全上下文容器將第3步填充了信息的Authentication,經過SecurityContextHolder.getContext().setAuthentication(…)方法,設置到其中。

SecurityContextHolder

      SecurityContextHolder用於存儲安全上下文(security context)的信息。當前操做的用戶是誰,該用戶是否已經被認證,他擁有哪些角色權限,這些都被保存在SecurityContextHolder中。SecurityContextHolder默認使用ThreadLocal 策略來存儲認證信息。看到ThreadLocal 也就意味着,這是一種與線程綁定的策略。Spring Security在用戶登陸時自動綁定認證信息到當前線程,在用戶退出時,自動清除當前線程的認證信息。但這一切的前提,是你在web場景下使用Spring Security。github

Authentication

       Authentication在spring security中是最高級別的身份/認證的抽象。由這個頂級接口,咱們能夠獲得用戶擁有的權限信息列表,密碼,用戶細節信息,用戶身份信息,認證信息。web

AuthenticationManager

    AuthenticationManager(接口)是認證相關的核心接口,也是發起認證的出發點spring

AuthenticationProvider

    認證具體實現數據庫

AccessDecisionManager

    用於訪問控制的,它決定用戶是否能夠訪問某個資源,實現這個接口能夠定製咱們本身的受權邏輯。編程

AccessDecisionVoter

    投票器,在受權的時經過投票的方式來決定用戶是否能夠訪問,這裏涉及到投票規則。安全

UserDetailsService

    負責從特定的地方(一般是數據庫)加載用戶信息框架

UserDetails

    表明用戶信息,即主體,至關於Shiro中的Subject。User是它的一個實現。ide

使用

 

特色

  • 全面的和可擴展的支持身份驗證和受權
  • 防止會話固定攻擊,好比點擊劫持,跨站請求僞造等
  • Servlet API 集成
  • 與Spring Web MVC集成
  • Spring Security依賴Spring,其功能強大,相對於Shiro而言學習難度稍大一些

源碼解讀

未完待續...學習

相關文章
相關標籤/搜索