shiro的初步認識

2021-10-08 16:45:52 字數 2513 閱讀 1501

1.首先自建乙個demo上上手(使用者登入認證)

******accountrealm ******accountrealm = new ******accountrealm();

@before

public void adduser()

@test

public void testauthentication()

2.接著來乙個使用者角色認證

******accountrealm ******accountrealm = new ******accountrealm();

@before

public void adduser()

@test

public void testauthentication()catch(exception e)

}

通過上面兩個小案列,可以看到:

在使用者登入和鑑權的時候,

defaultsecuritymanager defaultsecuritymanager = new defaultsecuritymanager(); defaultsecuritymanager.setrealm(******accountrealm);

securityutils.setsecuritymanager(defaultsecuritymanager);

subject subject = securityutils.getsubject();

usernamepasswordtoken token = new usernamepasswordtoken("ljj","123"); subject.login(token);

這些操作是少不了的。反正就是根據得到的使用者資料和本身存在的使用者資料進行比對。一致就成功。不一致就丟擲異常。

那麼接下來目的就很明顯了,既然可通過自建使用者來鑑權使用者。那麼也可以通過在資料庫中查詢使用者來進行比對。那麼問題有來了,既然是去資料庫中查詢,那麼鑑權的方式自然是需要自定義的了。因此,此處需要自定義reaml。

public class realmtest extends authorizingrealm 

/*** 使用者登入鑑定

* @param token

* @return

* @throws authenticationexception

*/@override

protected authenticationinfo dogetauthenticationinfo(authenticationtoken token) throws authenticationexception

很明顯的可以看到,自定義的類必須繼承authorizingrealm,然後重寫它的兩個方法:dogetauthorizationinfo和dogetauthenticationinfo。在dogetauthenticationinfo中,我們進行使用者登入鑑定;在dogetauthorizationinfo中,我們進行

角色許可權鑑定。有了這個自定義的realm之後,我們再去進行驗證。

@test

public void testtestauthentication()catch(exception e)

trycatch(exception e)

}

可以看到:

//構建securitymanager環境

defaultsecuritymanager manger = new defaultsecuritymanager();

manger.setrealm(realmtest);

securityutils.setsecuritymanager(manger);

subject subject = securityutils.getsubject();

usernamepasswordtoken usernamepasswordtoken = new usernamepasswordtoken("ljj","123");

subject.login(usernamepasswordtoken);

這些**仍然是必須的,但是,在這些**之前,加上了

realmtest realmtest = new realmtest();

這說明,我們需要把之前定義好的realm,重新放入securitymanager環境。

當程式走進subject.login(usernamepasswordtoken);的時候,會先進入

dogetauthenticationinfo方法,然後再進入
dogetauthorizationinfo。也就是說,使用者登入先鑑定,然後再進行角色和許可權的鑑定。其中,login方法是怎麼走到這兩個方法裡面的,此處暫不作調查。只需記住此類操作規範即可。後續會逐步研究shiro的底層,然後逐一解惑。
注意:如果運算元據庫來驗證的話,必須要配合shrioconfig來使用。因為操作dao層得先載入bean。

這是非常需要注意的

Shiro的初步認識

shiro主要是用來對使用者的登入 許可權進行管理,可以實現使用者的認證授權。shiro和spring security的區別 shiro使用簡單,輕量級,可以在b s c s系統中使用,不依賴spring spring security 原名是acegi 僅僅是乙個許可權框架,和spring依賴很...

類的初步認識

c 一直被稱為是比c更高階的語言,為什麼呢?恐怕就是因為具有物件導向的設計思想,它 將萬千變化 錯綜複雜的外部環境有組織的 有規律的整合在了一起。從規律上,我們引入 了類的概念,將原本複雜的外部環境按照一定的規律和相似點,劃分為不同的類,常言道 物以類聚,鳥易群分嘛。我們在將類有機的進行區別和管理 ...

程序的初步認識

程序是作業系統結構的基礎 是乙個正在執行的程式 計算機中正在執行的程式例項 可以分配給處理器並由處理器執行的乙個實體 由單一順序的執行顯示,乙個當前狀態和一組相關的系統資源所描述的活動單元。在程式的實現中,程序使用大有裨益。1.程序的建立函式 fork vfork 前者父子程序執行順序不定。2.在子...