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