在上篇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"))
listrolelist = new arraylist();
rolelist.add("admin");
rolelist.add("guest");
boolean results = currentuser.hasroles(rolelist);
for (int i = 0; i < results.length; i++)
另外我們也可以通過hasallroles(collectionrolenames)
來判斷使用者是否具有所有集合中指定的角色,都存在返回true,否則返回false。
如果我們不想做太多的邏輯處理,使用者存在角色就執行,不存在就直接丟擲異常,那麼我們可以checkrole*系列方法。
currentuser.checkrole("admin");
② 許可權判斷
那麼我們如何判斷使用者(subject)是否具有某種許可權或者某些許可權呢?subject提供了ispermitted*
方法來幫助我們進行處理。
if (currentuser.ispermitted("usermanagerment:deleteuser"))
if (currentuser.ispermitted("usermanagerment:getuserinfo"))
shiro還提供了其他的方法供我們使用,當然也包括checkpermission*系列,有興趣的朋友可以去到subject介面了解。 Shiro入門(六)Shiro授權
本章講解shiro授權的相關知識 1.概念 authorization 授權,也就是授予使用者訪問某些資源的許可權。前提在於需要使用者通過登入驗證才可以進行授權。許可權 permit 表示某些功能,如按鈕的顯示,選單的訪問,資料的crud 角色 role 許可權的集合,比如管理員角色,其擁有訪問系統...
shiro下篇授權
先寫個例子看一下 1 在realm中進行授權 1.2使用者請求的這個方法必須要有 quanxian 這個授權,才可以訪問。這裡給予當前登陸使用者 quanxian 這個訪問許可權。加上之後可以測試一下。2 使用shiro的方法註解方式許可權控制 第一步 在spring配置檔案中開啟shiro註解支援...
shiro認證授權
1.shiro配置類 1.1需要配置什麼?建立乙個shirofilte ctorybean物件,檢測認證 向bean中傳入securitymanager物件 沒有認證的時候應該訪問哪個url位址 setloginurl 哪些資源是可以被匿名訪問的 setfilterchaindefinitionma...