Apache Shiro 學習記錄2

2022-03-10 06:33:22 字數 2746 閱讀 6695

寫完上篇隨筆以後(鏈結).....我也想自己嘗試一下寫乙個strategy.....shiro自帶了3個strategy,教程(鏈結)裡作者也給了2個.....我想寫個都不一樣的策略.....看來看去....決定寫個lastsuccessfulstrategy好了...顧名思義就是返回最後乙個realm驗證成功的authenticationinfo的資訊...

1

package

com.github.zhangkaitao.shiro.chapter2.authenticator.strategy;23

import

org.apache.shiro.authc.authenticationexception;

4import

org.apache.shiro.authc.authenticationinfo;

5import

org.apache.shiro.authc.authenticationtoken;

6import

org.apache.shiro.authc.pam.abstractauthenticationstrategy;

7import

org.apache.shiro.realm.realm;

8import

org.apache.shiro.util.collectionutils;910

public

class lastsuccessfulstrategy extends

abstractauthenticationstrategy

2021

@override

22public

authenticationinfo afterattempt(realm realm,

23authenticationtoken token, authenticationinfo singlerealminfo,

24authenticationinfo aggregateinfo, throwable t)

25throws

authenticationexception

2930

@override

31public authenticationinfo afterallattempts(authenticationtoken token, authenticationinfo aggregate) throws

authenticationexception

3940

return

aggregate;41}

42 }

我的想法是這樣的...只要realm返回的info不為空,就把它作為aggregate儲存起來...否則直接返回aggregate....所以我override了merge方法...並在afterattemp裡呼叫它....

然後所有realm都處理完畢以後..如果aggregate是null...說明所有realm都驗證失敗了...那麼應該丟擲異常....這裡邏輯我就直接抄atleastonesuccessfulstrategy類的**了...

測試**直接修改教程的就行了

1

@test

2public

void

testhelloworld2()

20catch

(authenticationexception e)

2324 assert.assertequals(true, subject.isauthenticated()); //

斷言使用者已經登入

25system.out.println(subject.getprincipal());

2627

//6、退出

28subject.logout();

29 }

shiro2.ini也修改自教程

1

[main]

2#指定securitymanager的authenticator實現

3 authenticator=org.apache.shiro.authc.pam.modularrealmauthenticator

4 securitymanager.authenticator=$authenticator56

#指定securitymanager.authenticator的authenticationstrategy

7 lastsuccessfulstrategy=org.apache.shiro.authc.pam.atleastonesuccessfulstrategy

8 securitymanager.authenticator.authenticationstrategy=$lastsuccessfulstrategy

910 myrealm1=com.github.zhangkaitao.shiro.chapter2.realm.myrealm1

11 myrealm2=com.github.zhangkaitao.shiro.chapter2.realm.myrealm2

12 myrealm3=com.github.zhangkaitao.shiro.chapter2.realm.myrealm3

13 securitymanager.realms=$myrealm1,$myrealm3,$myrealm2

3個realm我就不貼了...和教程是一樣的....

這樣我自己的lastsuccessfulstrategy策略就完成啦o(∩_∩)o哈!

Apache Shiro 學習記錄3

晚上看了教程的第三章.感覺shiro字串許可權很好用.但是教程舉的例子太少了.而且有些地方講的不是很清楚.所以我也自己測試了一下.記錄一下測試的結果.1 view 這種型別的字串許可權可以匹配user view,qwer view這樣的,但是不能匹配qwe qwe view這樣的.就是說開頭的 不能...

Apache Shiro 授權概念

授權即是訪問控制,是對資源訪問管理過程。它將判斷使用者在應用程式中是否對資源有相應的訪問許可權。比如 判斷乙個使用者有檢視頁面的許可權,編輯資料的許可權,擁有某一按鈕的許可權,以及是否擁有列印的許可權等等。授權有三個核心元素 許可權,角色和使用者。1 許可權 在apache shiro 中許可權是安...

Apache Shiro 授權概念

授權即是訪問控制,是對資源訪問管理過程。它將判斷使用者在應用程式中是否對資源有相應的訪問許可權。比如 判斷乙個使用者有檢視頁面的許可權,編輯資料的許可權,擁有某一按鈕的許可權,以及是否擁有列印的許可權等等。授權有三個核心元素 許可權,角色和使用者。1許可權 在apacheshiro中許可權是安全機制...