先了解一下Shiro安全框架
?Shiro與Spring Security對比:
?Shiro的整體架構(gòu):
認(rèn)識Shiro!!!?
官網(wǎng):https://shiro.apache.org/
?
一. Shiro是什么
Shiro是一個Java平臺的開源權(quán)限框架,用于認(rèn)證和訪問授權(quán)。具體來說,滿足對如下元素的支持:
- 用戶,角色,權(quán)限(僅僅是操作權(quán)限,數(shù)據(jù)權(quán)限必須與業(yè)務(wù)需求緊密結(jié)合),資源(url)。
- 用戶分配角色,角色定義權(quán)限。
- 訪問授權(quán)時支持角色或者權(quán)限,并且支持多級的權(quán)限定義。
Q:對組的支持?
A:shiro默認(rèn)不支持對組設(shè)置權(quán)限。
Q:是否可以滿足對組進行角色分配的需求?
A:擴展Realm,可以支持對組進行分配角色,其實就是給該組下的所有用戶分配權(quán)限。
Q:對數(shù)據(jù)權(quán)限的支持? 在業(yè)務(wù)系統(tǒng)中定義?
A:shiro僅僅實現(xiàn)對操作權(quán)限的控制,用于在前端控制元素隱藏或者顯示,以及對資源訪問權(quán)限進行檢查。數(shù)據(jù)權(quán)限與具體的業(yè)務(wù)需求緊密關(guān)聯(lián),shiro本身無法實現(xiàn)對數(shù)據(jù)權(quán)限的控制。
Q:動態(tài)權(quán)限分配?
A:擴展org.apache.shiro.realm.Realm,支持動態(tài)權(quán)限分配。
Q:與Spring集成?
A:可以支持與Spring集成,shiro還支持jsp標(biāo)簽。
二. 系統(tǒng)架構(gòu)
在shiro架構(gòu)中,有3個最主要的組件:Subject,SecurityManager,Realm。
Subject本質(zhì)上就是當(dāng)前訪問用戶的抽象描述。
SecurityManager是Shiro架構(gòu)中最核心的組件,通過它可以協(xié)調(diào)其他組件完成用戶認(rèn)證和授權(quán)。實際上,SecurityManager就是Shiro框架的控制器。
Realm定義了訪問數(shù)據(jù)的方式,用來連接不同的數(shù)據(jù)源,如:LDAP,關(guān)系數(shù)據(jù)庫,配置文件等等。
三. 如何使用Shiro
Shiro作為一個完善的權(quán)限框架,可以應(yīng)用在多種需要進行身份認(rèn)證和訪問授權(quán)的場景,例如:
1. 在獨立應(yīng)用中使用shiro
http://www.cnblogs.com/nuccch/p/6780550.html?細(xì)說shiro之三:在獨立應(yīng)用中使用shiro
2. 在web應(yīng)用中使用shiro
http://www.cnblogs.com/nuccch/p/6785167.html?細(xì)說shiro之四:在web應(yīng)用中使用shiro
3. 在spring框架中集成shiro
http://www.cnblogs.com/nuccch/p/6790408.html?細(xì)說shiro之五:在spring框架中集成shiro
四. Shiro原理
1. 認(rèn)證
通過調(diào)用Subject.login(token)方法開始用戶認(rèn)證流程。
shiro用戶認(rèn)證時序圖:
2. 授權(quán)
shiro訪問授權(quán)有3種實現(xiàn)方式:api調(diào)用,java注解,jsp標(biāo)簽。
(1)在獨立應(yīng)用程序中訪問授權(quán)通過api調(diào)用實現(xiàn)
(2)在spring框架中可以通過java注解
@RequiresPermissions(value={"log:manage:*"}) public ModelAndView home(HttpServletRequest req) {ModelAndView mv = new ModelAndView("home");return mv; }(3)在JSP頁面中還可以直接使用jsp標(biāo)簽
<!-- 使用shiro標(biāo)簽 --> <shiro:hasPermission name="log:manage:*"><a href="<%=request.getContextPath()%>/user/home">操作日志審計</a><br/> </shiro:hasPermission>shiro訪問授權(quán)時序圖:
五. 注意事項
1.org.apache.shiro.realm.jdbc.JdbcRealm如果需要在授權(quán)時開啟權(quán)限檢查,必須設(shè)置permissionsLookupEnabled為true,否則只檢查角色。
2.用戶退出登錄時,Shiro用戶必須執(zhí)行l(wèi)ogout(),必須要注銷Session信息,避免影響下一次用戶認(rèn)證和授權(quán)。
3.如果在數(shù)據(jù)庫中存儲的用戶密碼為編碼值(如MD5加密),則在發(fā)送登錄請求時傳遞的密碼參數(shù)也必須是MD5加密結(jié)果,否則認(rèn)證失敗。
4.shiro框架只能控制操作權(quán)限,不能控制數(shù)據(jù)權(quán)限。數(shù)據(jù)權(quán)限與具體的業(yè)務(wù)緊密關(guān)聯(lián),無法通過一個通用的框架完成,通常都是利用關(guān)系數(shù)據(jù)庫查詢過濾實現(xiàn)。
對操作權(quán)限的控制有2層含義,其一:用戶在前端只能看到對應(yīng)權(quán)限的元素;其二:在后端對用戶操作進行權(quán)限檢查。
總結(jié)
以上是生活随笔為你收集整理的先了解一下Shiro安全框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库:分布式事务的解决方案
- 下一篇: 通俗易懂权限管理模块设计