shiro之許可權分配

2021-10-08 15:44:40 字數 4282 閱讀 4310

編寫html

// 登入後的鏈結

th:href

="@"

>

需要有admin角色的功能a

>

>

th:href

="@"

>

需要有admin角色的功能test01a

>

>

th:href

="@"

>

需要有admin角色的功能adda

>

>

th:href

="@"

>

需要有user角色的功能a

>

>

編寫controller

("/nopermission"

)public string nopermission()

("/admin/test"

)@responsebody

public string admintest()

("/user/test"

)@responsebody

public string usertest()

配置shiroconfig

//配置乙個admin開頭的所有請求需要登入 authc表示需要登入認證

//roles[admin] 表示所有已admin開頭的請求需要有admin的角色才可以使用

filterchainmap.

put(

"/admin/**"

,"authc,roles[admin]"

);

filterchainmap.

put(

"/user/**"

,"authc,roles[user]");

//配置乙個user開頭的所有請求需要登入 authc表示需要登入認證

realm
/**

* 使用者授權的方法, 當使用者認證通過每次訪問需要授權的請求時都需要執行這段**來完後曾授權操作

* 這裡用該查詢資料庫來獲取當前使用者的所有角色和許可權,並設定到shiro中

* @param principalcollection

* @return

*/protected authorizationinfo dogetauthorizationinfo

(principalcollection principalcollection)if(

"user"

.equals

(obj)

) set

permissions=

newhashset

<

>()

;//設定許可權,這裡個操作應該是用資料中讀取資料if(

"admin"

.equals

(obj)

) ******authorizationinfo info=

new******authorizationinfo()

; info.

setroles

(roles)

;//設定角色資訊

info.

setstringpermissions

(permissions)

;//設定使用者的許可權資訊

return info;

}

/**

* 開啟shiro註解支援(例如@requiresroles()和@requirespermissions())

* shiro的註解需要借助spring的aop來實現

* @return

*/@bean

public defaultadvisorautoproxycreator advisorautoproxycreator()

/** * shiro開啟aop

* @return

*/@bean

public authorizationattributesourceadvisor authorizationattributesourceadvisor

(securitymanager securitymanager)

/**

* @requiresroles 這個註解是shiro提供的 用於標籤類或者當前在訪問時需要是什麼樣的角色

* 屬性

* value 取值string 陣列型別 用於指定訪問時所需要的乙個或多個角色名

* logical 取值為logical.and或logical.or,當指定多個角色時可以使用and或者or來表示

* 表示當前使用者必須同時擁有多個角色才可以訪問這個方法

注意:shiro**列基於配置許可權驗證以及註解的許可權驗證意外還支援基於方法呼叫的許可權驗證例如

* subject subject=securityutils.getsubject();

* string roles=;

* subject.checkroles(roles);//驗證當前使用者是否擁有指定的角色

* string permissions=;

* subject.checkpermissions(permissions);//驗證當前使用者是否擁有指定的許可權

* @return

*/("/admin/test"

)@requiresroles

(value =

)@responsebody

public string admintest()

("/user/test"

)@requiresroles

(value =

)@responsebody

public string usertest()

/**

* 配置自定義的異常攔截,需要攔截authorizationexception 異常或shiroexception異常

* 注意:當前shiro出現許可權驗證失敗以後會丟擲異常,因此必須要寫乙個自定義的異常攔截

* 否則我發正常的轉型到我們的錯誤頁面

* @return

*/@exceptionhandler

(value=

)public string permissionerror

(throwable throwable)

//realm

/** * 使用者授權的方法, 當使用者認證通過每次訪問需要授權的請求時都需要執行這段**來完後曾授權操作

* 這裡用該查詢資料庫來獲取當前使用者的所有角色和許可權,並設定到shiro中

* @param principalcollection

* @return

*/protected authorizationinfo dogetauthorizationinfo

(principalcollection principalcollection)if(

"user"

.equals

(obj)

) set

permissions=

newhashset

<

>()

;//設定許可權,這裡個操作應該是用資料中讀取資料if(

"admin"

.equals

(obj)

) ******authorizationinfo info=

new******authorizationinfo()

; info.

setroles

(roles)

;//設定角色資訊

info.

setstringpermissions

(permissions)

;//設定使用者的許可權資訊

return info;

}//controller

/** * @requirespermissions 用於判斷當前使用者是否有指定的乙個或多個許可權用法與requiresroles相同

*/@requiresroles

(value =

)@requirespermissions

(value=)(

"/admin/add"

)public

@responsebody string adminadd()

Shiro許可權模型以及許可權分配的兩種方式

2.許可權模型設計 主體 user password 許可權 許可權名稱 資源id 資源 資源名稱 訪問url 角色 角色名稱 角色和許可權關係 角色id 許可權id 主體和角色關係 主體id 角色id 3.許可權分配有兩種 3.1 基於角色的許可權控制 缺點 在經常變更角色許可權的管理系統中無法做...

shiro理論之許可權的理解

基本上涉及到使用者參與的系統都要進行許可權管理,許可權管理屬於系統安全的範疇,許可權管理實現對使用者訪問系統的控制,按照 安全規則或者 安全策略 控制使用者可以訪問而且只能訪問自己被授權的資源。許可權管理包括使用者身份認證和授權兩部分,簡稱認證授權。對於需要訪問控制的資源使用者首先經過身份認證,認證...

shiro重新整理許可權

近期做的那個專案購買之後需要重新整理許可權,這個之前沒做過,通過檢視與找到了動態重新整理許可權的方式,加入我的專案如下進行許可權修改 realmsecuritymanager rsm realmsecuritymanager securityutils.getsecuritymanager acco...