摘要:授權(quán)三大要素是安全框架中最原子性的元素,它用來描述能夠做什么或者說能夠執(zhí)行什么樣的操作,比如刪除用戶查看用戶詳情查看商品詳情等。用戶就是我們之前提到的三大核心概念之一的。
在上篇Shiro認(rèn)證原理的最后,我們介紹了IniRealm是如何進(jìn)行認(rèn)證,本篇我們將介紹Shiro授權(quán)過程中的幾個(gè)概念以及Shiro編程式的授權(quán)操作,并通過常用的用戶、角色、權(quán)限授權(quán)模式來加深理解授權(quán)的過程。
1 授權(quán)三大要素
① Permissions
Permissions是Shiro安全框架中最原子性的元素,它用來描述能夠做什么或者說Subject能夠執(zhí)行什么樣的操作,比如刪除用戶、查看用戶詳情、查看商品詳情等。
② Roles
Roles大家應(yīng)該都很清楚了,某人具有某個(gè)角色,那么就對應(yīng)具有怎樣的行為或責(zé)任,也就是一個(gè)角色代表一組行為或責(zé)任。比如我們的后臺管理系統(tǒng),用戶的角色常常會(huì)有超級管理員、普通管理員之分,它們對應(yīng)的權(quán)限是不相同的,一般超級管理員會(huì)具有更多的權(quán)限。
③ 用戶
Users就是我們之前提到的Shiro三大核心概念之一的Subject。用戶與角色、權(quán)限的關(guān)系取決于我們的應(yīng)用,可以選擇直接將權(quán)限賦給用戶,也可以選擇將權(quán)限賦給角色,然后將角色賦給用戶,本篇我們將通過后者來講述。
1.2 授權(quán)常見操作
我們首先來回顧下INI配置文件,看下我們?nèi)绾瓮ㄟ^INI配置文件指定用戶、角色、權(quán)限
#對象以及對象的屬性,比如SecurityManager、Realms [main] #hashedMatcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher #hashedMatcher.hashAlgorithmName = MD5 #riversRealm = com.rivers.study.RiversRealm #riversRealm.credentialsMatcher = $hashedMatcher #securityManager.realms = $riversRealm #用戶名以及該用戶對應(yīng)的密碼以及角色 #username = password, role1, role2..., roleN [users] rivers = secret, admin calabash = warrior, guest #角色以及該角色可以擁有的權(quán)限 #rolename = permission1, permission2..., permissionN [roles] admin = UserManagerment:* guest = UserManagerment:getUserInfo [urls]
在上面的配置文件中,我們指定了兩個(gè)用戶rivers、calabash,用戶rivers的密碼是secret,具有admin角色,而用戶calabash的密碼是warrior,具有g(shù)uest角色;角色admin具有UserManagerment:*下的所有操作,而guest只有UserManagerment:getUserInfo權(quán)限。
① 角色判斷
那么我們?nèi)绾闻袛嘤脩簦⊿ubject)是否具有某種角色或者某些角色呢?Subject提供了hasRole*方法來幫助我們進(jìn)行處理。
Subject currentUser = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken("calabash", "warrior"); currentUser.login(token); if (currentUser.hasRole("admin")) { logger.info("用戶【" + currentUser.getPrincipal() + "】具有【admin】角色"); } ListroleList = new ArrayList (); roleList.add("admin"); roleList.add("guest"); boolean[] results = currentUser.hasRoles(roleList); for (int i = 0; i < results.length; i++) { String tmp = results[i] ? "具有" : "不具有"; logger.info("用戶【" + currentUser.getPrincipal() + tmp + "【" + roleList.get(i) + "】角色"); }
另外我們也可以通過hasAllRoles(Collection
如果我們不想做太多的邏輯處理,用戶存在角色就執(zhí)行,不存在就直接拋出異常,那么我們可以checkRole*系列方法。
currentUser.checkRole("admin");
② 權(quán)限判斷
那么我們?nèi)绾闻袛嘤脩簦⊿ubject)是否具有某種權(quán)限或者某些權(quán)限呢?Subject提供了isPermitted*方法來幫助我們進(jìn)行處理。
if (currentUser.isPermitted("UserManagerment:deleteUser")) { logger.info("用戶【" + currentUser.getPrincipal() + "】具有【UserManagerment:deleteUser】權(quán)限"); } if (currentUser.isPermitted("UserManagerment:getUserInfo")) { logger.info("用戶【" + currentUser.getPrincipal() + "】具有【UserManagerment:getUserInfo】權(quán)限"); }
Shiro還提供了其他的方法供我們使用,當(dāng)然也包括checkPermission*系列,有興趣的朋友可以去到Subject接口了解。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67465.html
摘要:是什么是功能強(qiáng)大簡單易用的安全框架,核心功能包括認(rèn)證授權(quán)加密以及管理。的主要作用就是用來執(zhí)行認(rèn)證和授權(quán)的邏輯,它其實(shí)就相當(dāng)于與安全數(shù)據(jù)用戶賬號密碼角色權(quán)限之間進(jìn)行交互的橋梁。至此,的三個(gè)核心概念已經(jīng)介紹完畢。 1、Shiro是什么 Shiro是功能強(qiáng)大、簡單易用的Java安全框架,核心功能包括:認(rèn)證、授權(quán)、加密以及Session管理。Shiro的應(yīng)用范圍很廣泛,小型移動(dòng)端應(yīng)用、大型We...
摘要:認(rèn)證原理與認(rèn)證就是進(jìn)行身份確認(rèn)的過程,也就是用戶對應(yīng)中的需要提供證明來證實(shí)自己的身份。是的頂級抽象實(shí)現(xiàn)類,主要用于處理認(rèn)證操作,至于授權(quán)等操作則交由該類的子類去處理。至此,認(rèn)證的整體過程與底層邏輯已經(jīng)全部介紹完畢。 在上篇Shiro核心概念中,我們介紹了Shiro的三大核心概念:Subject、SecurityManager、Realms,并通過示例代碼QuickStart展示常用的認(rèn)...
摘要:框架具有輕便,開源的優(yōu)點(diǎn),所以本譯見構(gòu)建用戶管理微服務(wù)五使用令牌和來實(shí)現(xiàn)身份驗(yàn)證往期譯見系列文章在賬號分享中持續(xù)連載,敬請查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務(wù)邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對身份進(jìn)行驗(yàn)證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護(hù)REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:表示對用戶資源進(jìn)行操作,相當(dāng)于,對所有用戶資源實(shí)例進(jìn)行操作。與整合,實(shí)際上的操作都是通過過濾器來干的。將安全管理器交由工廠來進(jìn)行管理。在過濾器鏈中設(shè)置靜態(tài)資源不攔截。 前言 本文主要講解的知識點(diǎn)有以下: Shiro授權(quán)的方式簡單介紹 與Spring整合 初始Shiro過濾器 一、Shiro授權(quán) 上一篇我們已經(jīng)講解了Shiro的認(rèn)證相關(guān)的知識了,現(xiàn)在我們來弄Shiro的授權(quán) Shir...
摘要:安全框架是目前為止作為登錄注冊最常用的框架,因?yàn)樗值膹?qiáng)大簡單,提供了認(rèn)證授權(quán)加密和會(huì)話管理等功能。本質(zhì)上是一個(gè)特定安全的。當(dāng)配置時(shí),必須指定至少一個(gè)用來進(jìn)行身份驗(yàn)證和或授權(quán)。提供了多種可用的來獲取安全相關(guān)的數(shù)據(jù)。 web開發(fā)安全框架中的Apache Shiro的應(yīng)用前階段就hadoop的分享了一些內(nèi)容,希望對新手入門的朋友有點(diǎn)幫助吧!對于hadoop新手入門的,還是比較推薦大快搜索...
閱讀 2905·2021-11-22 13:54
閱讀 3541·2021-11-16 11:44
閱讀 1381·2021-09-07 10:19
閱讀 1483·2019-08-29 17:30
閱讀 3206·2019-08-29 11:33
閱讀 3554·2019-08-26 12:18
閱讀 2894·2019-08-26 11:53
閱讀 1347·2019-08-26 10:47