Shiro安全框架(四) 許可權認證

2021-09-26 02:46:45 字數 3281 閱讀 8097

1、許可權認證核心要素

許可權認證,也就是訪問控制,即在應用中控制誰能訪問哪些資源。

在許可權認證中,最核心的三個要素是:許可權,角色,使用者

使用者:在shiro中,代表訪問系統的使用者,即subject。

角色:是許可權的集合,乙個角色可以包含多個許可權。

許可權:操作資源的權利,如訪問某個頁面,及某個模組的資料的新增,修改 ,刪除,檢視的權利。

2、授權

1)程式設計式授權

2)註解式授權

@requiresauthentication要求當前subject 已經在當前的session 中被驗證通過才能被訪問或呼叫。

@requiresguest要求當前的subject 是乙個"guest",也就是說,他們必須是在之前的session 中沒有被驗證或被記住才能被訪問或呼叫。

@requirespermissions(「account:create」)要求當前的subject 被允許乙個或多個許可權,以便執行註解的方法。

@requiresroles(「administrator」)要求當前的subject 擁有所有指定的角色。如果他們沒有,則該方法將不會被執行,而且authorizationexception 異常將會被丟擲。

@requiresuser requiresuser註解需要當前的subject 是乙個應用程式使用者才能被註解的類/例項/方法訪問或呼叫。乙個「應用程式使用者」被定義為乙個擁有已知身份,或在當前session 中由於通過驗證被確認,或者在之前session 中的』rememberme』服務被記住。

3)jsp標籤授權

guest標籤:使用者沒有身份驗證時顯示相應資訊,即遊客訪問資訊;

user 標籤:使用者已經身份驗證/記住我登入後顯示相應的資訊;

authenticated 標籤:使用者已經身份驗證通過,即subject.login 登入成功,不是記住我登入的。

notauthenticated 標籤:使用者沒有身份驗證通過,即沒有呼叫subject.login 進行登入,包括記住我自動登入的也屬於未進行身份驗證。

principal 標籤顯示使用者身份資訊,預設呼叫subject.getprincipal()獲取,即primary principal。

hasrole 標籤如果當前subject 有角色將顯示body 體內容。

lacksrole 標籤如果當前subject 沒有角色將顯示body 體內容。

hasanyroles 標籤如果當前subject 有任意乙個角色(或的關係)將顯示body 體內容。

haspermission 標籤如果當前subject 有許可權將顯示body 體內容。

lackspermission 標籤如果當前subject 沒有許可權將顯示body 體內容

基於許可權的身份判斷

單個許可權:query

單個資源多個許可權:user:query,user:add 多值user:query,add

單個資源所有許可權:user:query,add,update,delete =user:*

所有資源某個許可權::view

例項級別的許可權控制

單個例項的單個許可權:printer:query:lp7200, printer:print:epsoncolor

所有例項的單個許可權:printer:print:

所有例項的所有許可權:printer::

單個例項的所有許可權:printer:*:lp7200

單個例項的多個許可權:printer:query,print:lp7200

1.在resources目錄下建立配置檔案,shiro_permissopn.ini,用於描述使用者的登入資訊以及角色和許可權資訊。

[users]

muma=123,role1

admin=123,role1,role2

[roles]

role1=user:select

role2=user:add,user:update,user:delete,user:select

2.建立shirotest測試類

import org.apache.shiro.subject.subject;

public class shirotest4 {

public static void main(string args) {

subject subject = shiroutils.login("classpath:shiro_permission.ini","admin", "123");

//單個許可權的判斷

system.out.println(subject.ispermitted("user:add")?"有user:add許可權":"沒有user:add許可權");

system.out.println(subject.ispermitted("user:delete")?"有user:delete許可權":"沒有user:delete許可權");

system.out.println(subject.ispermitted("user:update")?"有user:update許可權":"沒有user:update許可權");

system.out.println(subject.ispermitted("user:select")?"有user:select許可權":"沒有user:select許可權");

//多個許可權的判斷

boolean permitted = subject.ispermitted("user:add", "user:delete","user:update","user:select");

for (int i=0;i3.測試結果

Shiro許可權認證

shiro的授權以及許可權 關係圖 我們需要在service層中先寫好方法 public inte ce shirouserservice然後imp繼承 service shirouserservice public class shirouserserviceimpl implements shi...

Shiro安全框架 自定義認證

1.和之前一樣先引入依賴 org.apache.shiro shiro web org.apache.shiro shiro core org.apache.shiro shiro spring commons logging commons logging 1.22.配置好自定義shiro.ini...

Shiro許可權認證Web

目錄 shiro內建的過濾器講解 filter配置路徑 shiro 資料安全之資料加解密 1.核心過濾器類 defaultfilter,配置哪個路徑對應哪個 進行處理 2.authc org.apache.shiro.web.filter.authc.formauthenticationfilter...