寫完上篇隨筆以後(鏈結).....我也想自己嘗試一下寫乙個strategy.....shiro自帶了3個strategy,教程(鏈結)裡作者也給了2個.....我想寫個都不一樣的策略.....看來看去....決定寫個lastsuccessfulstrategy好了...顧名思義就是返回最後乙個realm驗證成功的authenticationinfo的資訊...
1package
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中許可權是安全機制...