Java的安全框架數(shù)得著的有 Apache Shiro 一個(gè),當(dāng)然還有大名鼎鼎的 Spring Security ,從規(guī)模上講, Shiro 更加簡(jiǎn)單,而且也滿足大多數(shù)的需求,所以被使用的頻率更高一些.
Shiro 可以做到的事情主要是:
- 認(rèn)證
- 授權(quán)
- 加密
- 會(huì)話管理
- Web集成
- 緩存
層次架構(gòu)
Authentication : 身份認(rèn)證,驗(yàn)證用戶是不是有相應(yīng)的身份
Authorization : 授權(quán),權(quán)限的認(rèn)證,驗(yàn)證某一個(gè)用戶是否擁有某個(gè)權(quán)限
Session Manager : 會(huì)話管理,用戶登錄之后就是一次會(huì)話,在退出之前,用戶的信息也都是在會(huì)話中保存的
Cryptography : 加密,數(shù)據(jù)是不是安全,密碼需要加密存儲(chǔ)
Web Support : 可以集成到Web環(huán)境
Concurrency : 并發(fā)多線程的支持,在一個(gè)線程中開(kāi)啟另一個(gè),權(quán)限也會(huì)相應(yīng)傳播
Testing : 提供測(cè)試的支持
Run As : 用戶之間身份的假裝
Remember Me : 記住我,一次登錄成功之后不再需要再次登錄
重點(diǎn) : Shiro 本身并沒(méi)有角色權(quán)限等信息,需要自己設(shè)計(jì)提供,然后注入到框架中
那么到底怎么使用 Shiro ?怎么在自己的項(xiàng)目里整合?
先從使用的角度看看都有哪一些類會(huì)在應(yīng)用程序的代碼里用到 :
使用
主要的交互就是使用subject對(duì)象來(lái)進(jìn)行的:
Subject : 所謂的主體,也就是抽象的用戶概念,系統(tǒng)的訪問(wèn)者
Security Manager : 具體的操作執(zhí)行都是在這個(gè)類,安全管理器
Realm : 存儲(chǔ)安全數(shù)據(jù)的, 具體的角色權(quán)限都是用這個(gè)表示 - 我們直面的操作都是 subject, 但是 subject 的背后是security manager 來(lái)具體掌控
- realm 需要自己注入,也就是規(guī)則要實(shí)現(xiàn)確定下來(lái), 管理器才好判斷具體的權(quán)限規(guī)則
再次重點(diǎn) : Shiro 里面本身沒(méi)有權(quán)限規(guī)則,需要自己注入
Shiro 本身的內(nèi)部架構(gòu):
內(nèi)部架構(gòu)
Subject : 主體, 交互的用戶
Security Manager : 安全管理器,看著就是最大的,也就是最重要的吧,Shiro 的中心,什么都是他來(lái)執(zhí)行
Authenticator : 認(rèn)證, 可以自定義認(rèn)證的策略,就是怎么樣算是認(rèn)證通過(guò)了
Authorizer : 授權(quán), 決定權(quán)限是不是授予
Realm : 安全數(shù)據(jù), 安全實(shí)體,需要用戶自己來(lái)實(shí)現(xiàn)
Session Manager : 會(huì)話管理,只要是Web肯定都是需要管理會(huì)話的
Session DAO : 存在數(shù)據(jù)庫(kù)的會(huì)話信息, 訪問(wèn)需要一個(gè)中間層
Cache Manager : 緩存, 很少更改的信息,比如安全的規(guī)則數(shù)據(jù),就可以放在緩存里面,訪問(wèn)就會(huì)快很多了
Cryptography : 加密解密模塊


