Realm 是可以訪問程序特定的安全數(shù)據(jù)如用戶盾舌、角色伶授、權限等的一個組件. Realm 會將這些程序特定的安全數(shù)據(jù)轉換成一種 Shiro 可以理解的形式, Shiro 就可以依次提供容易理解的 Subject 程序API, 而不管有多少數(shù)據(jù)源或者程序中你的數(shù)據(jù)如何組織.
Realm 通常和數(shù)據(jù)源是一對一的對應關系, 如關系數(shù)據(jù)庫, LDAP 目錄, 文件系統(tǒng), 或其他類似資源. 因此, Realm 接口的實現(xiàn)使用數(shù)據(jù)源特定的API 來展示授權數(shù)據(jù)( 角色, 權限等), 如JDBC, 文件IO, Hibernate 或JPA, 或其他數(shù)據(jù)訪問API
Realm 實質上就是一個特定安全的 DAO
因為這些數(shù)據(jù)源通常存儲身份驗證數(shù)據(jù)( 如密碼的憑證) 以及授權數(shù)據(jù)( 如角色或權限) , 每個 Shiro Realm 都能夠執(zhí)行身份驗證和授權操作.
Realm 配置
如果使用 Shiro 的 ini 配置文件, 你可以在[main]區(qū)域內(nèi)像配置其它對象一樣定義和引用Realms
在定義一個或多個Realm后,再將它們在securityManager上進行統(tǒng)一配置
例如:
fooRealm = com.company.foo.Realm
barRealm = com.company.another.Realm
bazRealm = com.company.baz.Realm
securityManager.realms = $fooRealm, $barRealm, $bazRealm
簡單證明匹配
所有 Shiro 都是開箱即用的, Realm 默認使用一個 SimpleCredentialsMatcher
, SimpleCredentialsMatcher
對存儲的用戶憑證和從 AuthenticationToken
提交的用戶憑證直接執(zhí)行相等檢查
例如君珠,如果提交了一個UsernamePasswordToken
, SimpleCredentialsMatcher
檢查提交的密碼與存儲的密碼是否完全相等
SimpleCredentialsMatcher 不僅僅對字符串對比, 它可以對大多數(shù)常用類型囚企,如字符串吗讶、字符數(shù)組、字節(jié)數(shù)組曹抬、文件和輸入流等執(zhí)行對比 .
___________ .___ _____ _________ .__ __
\_ _____/ ____ __| _/ _____/ ____\ \_ ___ \| |__ _____ _______/ |_ ___________
| __)_ / \ / __ | / _ \ __\ / \ \/| | \\__ \ \____ \ __\/ __ \_ __ \
| \ | \/ /_/ | ( <_> ) | \ \___| Y \/ __ \| |_> > | \ ___/| | \/
/_______ /___| /\____ | \____/|__| \______ /___| (____ / __/|__| \___ >__|
\/ \/ \/ \/ \/ \/|__| \/
End of Chapter