Shiro實戰(三)Shiro授權(上)

2021-09-16 14:31:44 字數 2579 閱讀 5335

在上篇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...