Apache Shiro系列教程之三:Shiro的結(jié)構(gòu)
Shiro的設(shè)計目標(biāo)是簡化應(yīng)用的安全管理工作。軟件通常是以用戶為基礎(chǔ)設(shè)計的。也就是說,我們經(jīng)常是根據(jù)用戶是怎樣和我們的軟件交互的來設(shè)計相關(guān)的用戶接口。比如,你可能會說“如果是已經(jīng)登錄的用戶與我的軟件交互,那么我給他就顯示一個按鈕,讓他點擊后可以查看自己的賬戶信息。如果用戶沒有登錄,那么我就顯示一個注冊按鈕”。
這個例子說明了我們軟件中很多代碼都是為了滿足用戶需求而寫。即使“用戶”有時候壓根就不是一個人(比如說另一個軟件系統(tǒng))。
Shiro的設(shè)計反映了這些思想,這樣使得開發(fā)者更加容易理解Shiro中的一些概念,也使得Shiro更加易用。
一、概覽Shiro結(jié)構(gòu)
從高層次來看,Shiro的結(jié)構(gòu)中有三個主要的概念:Subject、SecurityManager和Realms。下圖展示了這些組件是如何交互的:
-
Subject:指當(dāng)前正在執(zhí)行程序的“用戶”。Subject含義更廣,因為用戶通常是指人,而Subject可以指人、進(jìn)程、計劃任務(wù)、守護(hù)進(jìn)程等。準(zhǔn)確的說,Subject指的是“當(dāng)前和軟件交互的事物”。在多數(shù)場景中,你可以將Subject粗暴地認(rèn)為是用戶。
Subject對象都會和一個SecurityManager對象綁定。當(dāng)你和一個Subject交互時,這些交互行為會被相應(yīng)的SecurityManager翻譯為subject-specific的行為。 -
SecurityManager:SecurityManager是Shiro結(jié)構(gòu)中的核心。它用來協(xié)調(diào)其內(nèi)部的各種安全組件。然而,一旦SecurityManager和其內(nèi)部的安全組件配置完成后,程序員就不再會用到它了,這時候程序員通常是與Subject的API打交道。
我們將在后序教程中詳細(xì)介紹SecurityManager。但是在此之前,要知道當(dāng)我們與Subject交互時,實際上是SecurityManager在幕后幫我們完成了那些操作,從上面的圖中也可以看出這一點。 -
Realms:Realms就像一個橋或連接器,將Shiro和你的應(yīng)用安全數(shù)據(jù)連接起來。當(dāng)我們用安全相關(guān)的數(shù)據(jù)交互時,比如用戶賬戶的身份驗證(登錄)和授權(quán)管理,Shiro會從一個或多個配置好的Realms中尋找相關(guān)數(shù)據(jù)。
從這個角度來說,Realms實際上是一個DAO:將連接到數(shù)據(jù)源的細(xì)節(jié)封裝到內(nèi)部,并且使Shiro可以輕易地讀取相關(guān)的數(shù)據(jù)。當(dāng)我們配置Shiro時,必須至少有一個Realms。SecurityManager可以由多個Realms配置,但至少有一個Realms配置。
Shiro提供了多種Realms去連接數(shù)據(jù)源,如LDAP,數(shù)據(jù)庫(JDBC),文本配置文件(如INI)。
和其他內(nèi)部組件一樣,SecurityManager管理Realms如何獲取安全數(shù)據(jù)和認(rèn)證數(shù)據(jù)去配置Subject。
二、詳細(xì)結(jié)構(gòu)
下圖展示了Shiro的詳細(xì)結(jié)構(gòu):
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26