最近專案中用到了shrio許可權控制,因此抽出一定的時間了解了一下他的使用方式和原理,同springsecurity的方式一樣,使用shiro許可權控制,主要包括了三個重要的組成部分 user,permission,role即使用者,許可權,和角色,其中,使用者和許可權,角色之間是一對多的,許可權和角色之間是多對多的組成關係,實現的方式主要有3種方式,用原生**,配置檔案,註解的方式實現:
這裡主要介紹註解的方式:具體位址見
shiro內建的控制項:
首先,來了解一下shiro的三個核心元件:subject, securitymanager 和 realms
subject:即「當前操作使用者」。但是,在shiro中,subject這一概念並不僅僅指人,也可以是第三方程序、後台帳戶(daemon account)或其他類似事物。它僅僅意味著「當前跟軟體互動的東西」。但考慮到大多數目的和用途,你可以把它認為是shiro的「使用者」概念。
subject代表了當前使用者的安全操作,securitymanager則管理所有使用者的安全操作。
securitymanager:它是shiro框架的核心,典型的facade模式,shiro通過securitymanager來管理內部元件例項,並通過它來提供安全管理的各種服務。
realm: realm充當了shiro與應用安全資料間的「橋梁」或者「聯結器」。也就是說,當對使用者執行認證(登入)和授權(訪問控制)驗證時,shiro會從應用配置的realm中查詢使用者及其許可權資訊。
從這個意義上講,realm實質上是乙個安全相關的dao:它封裝了資料來源的連線細節,並在需要時將相關資料提供給shiro。當配置shiro時,你必須至少指定乙個realm,用於認證和(或)授權。配置多個realm是可以的,但是至少需要乙個。
shiro內建了可以連線大量安全資料來源(又名目錄)的realm,如ldap、關聯式資料庫(jdbc)、類似ini的文字配置資源以及屬性檔案等。如果預設的realm不能滿足需求,你還可以插入代表自定義資料來源的自己的realm實現。
常用的五種註解如下:
requiresauthentication:
使用該註解標註的類,例項,方法在訪問或呼叫時,當前subject必須在當前session中已經過認證。requiresguest:
使用該註解標註的類,例項,方法在訪問或呼叫時,當前subject可以是「gust」身份,不需要經過認證或者在原先的session中存在記錄。requirespermissions:
當前subject需要擁有某些特定的許可權時,才能執行被該註解標註的方法。如果當前subject不具有這樣的許可權,則方法不會被執行。requiresroles:
當前subject必須擁有所有指定的角色時,才能訪問被該註解標註的方法。如果當天subject不同時擁有所有指定角色,則方法不會執行還會丟擲authorizationexception異常。requiresuser
當前subject必須是應用的使用者,才能訪問或呼叫被該註解標註的類,例項,方法。使用方法:
shiro的認證註解處理是有內定的處理順序的,如果有個多個註解的話,前面的通過了會繼續檢查後面的,若不通過則直接返回,處理順序依次為(與實際宣告順序無關):
requiresroles示例:requirespermissions
requiresauthentication
requiresuser
requiresguest
可以用在controller或者方法上。可以多個roles,多個roles時預設邏輯為 and也就是所有具備所有role才能訪問。
//屬於user角色
@requiresroles("user")
//必須同時屬於user和admin角色
@requiresroles()
//屬於user或者admin之一;修改logical為or 即可
@requiresroles(value=,logical=logical.or)
requirespermissions註解:
//符合index:hello許可權要求
@requirespermissions("index:hello")
//必須同時複核index:hello和index:world許可權要求
@requirespermissions()
//符合index:hello或index:world許可權要求即可
@requirespermissions(value=,logical=logical.or)
Shiro的許可權控制
requirespermissions 許可權的攔截,對應使用者的許可權列表。logical是各 個許可權的關係,or是滿足乙個就行,and是都得滿足 requiresroles 角色的攔截,對應使用者的角色 role requirespermissions value logical logica...
shiro 一 許可權控制介紹
只要有使用者參與的系統一般都要有許可權管理,許可權管理實現對使用者訪問系統的控制,按照安全規則或者安全策略控制使用者可以訪問而且只能訪問自己被授權的資源。許可權管理包括使用者認證和授權兩部分。shiro也是基於此來進行設計實現的 使用者認證一般流程如下 subject 主體,理解為使用者,可能是程式...
shiro控制登入訪問許可權
步驟 1.在web.xml中配置 2.在spring mvc中配置 3.建立兩個實體類 在web層建立 實體類一 authrealm 繼承shrio包中的類 authorizingrealm authorizingrealm是realm的實現類之一 實體類二 customcredentialsmat...