Redis 簡(jiǎn)介
Redis 是完全開源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。
Redis 與其他 key - value 緩存產(chǎn)品有以下三個(gè)特點(diǎn):
Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
Shiro是什么
Shiro是一個(gè)Java平臺(tái)的開源權(quán)限框架,用于認(rèn)證和訪問(wèn)授權(quán)。具體來(lái)說(shuō),滿足對(duì)如下元素的支持:
用戶,角色,權(quán)限(僅僅是操作權(quán)限,數(shù)據(jù)權(quán)限必須與業(yè)務(wù)需求緊密結(jié)合),資源(url)。
用戶分配角色,角色定義權(quán)限。
訪問(wèn)授權(quán)時(shí)支持角色或者權(quán)限,并且支持多級(jí)的權(quán)限定義。
Q:對(duì)組的支持?
A:shiro默認(rèn)不支持對(duì)組設(shè)置權(quán)限。
Q:是否可以滿足對(duì)組進(jìn)行角色分配的需求?
A:擴(kuò)展Realm,可以支持對(duì)組進(jìn)行分配角色,其實(shí)就是給該組下的所有用戶分配權(quán)限。
Q:對(duì)數(shù)據(jù)權(quán)限的支持? 在業(yè)務(wù)系統(tǒng)中定義?
A:shiro僅僅實(shí)現(xiàn)對(duì)操作權(quán)限的控制,用于在前端控制元素隱藏或者顯示,以及對(duì)資源訪問(wèn)權(quán)限進(jìn)行檢查。數(shù)據(jù)權(quán)限與具體的業(yè)務(wù)需求緊密關(guān)聯(lián),shiro本身無(wú)法實(shí)現(xiàn)對(duì)數(shù)據(jù)權(quán)限的控制。
Q:動(dòng)態(tài)權(quán)限分配?
A:擴(kuò)展org.apache.shiro.realm.Realm,支持動(dòng)態(tài)權(quán)限分配。
Q:與Spring集成?
A:可以支持與Spring集成,shiro還支持jsp標(biāo)簽。
在shiro架構(gòu)中,有3個(gè)最主要的組件:Subject,SecurityManager,Realm。
Subject本質(zhì)上就是當(dāng)前訪問(wèn)用戶的抽象描述。
SecurityManager是Shiro架構(gòu)中最核心的組件,通過(guò)它可以協(xié)調(diào)其他組件完成用戶認(rèn)證和授權(quán)。實(shí)際上,SecurityManager就是Shiro框架的控制器。
Realm定義了訪問(wèn)數(shù)據(jù)的方式,用來(lái)連接不同的數(shù)據(jù)源,如:LDAP,關(guān)系數(shù)據(jù)庫(kù),配置文件等等。