Apache Shiro 使用手冊(cè)(四) Realm 實(shí)現(xiàn)
在認(rèn)證、授權(quán)內(nèi)部實(shí)現(xiàn)機(jī)制中都有提到,最終處理都將交給Real進(jìn)行處理。因?yàn)樵赟hiro中,最終是通過Realm來獲取應(yīng)用程序中的用戶、角色及權(quán)限信息的。通常情況下,在Realm中會(huì)直接從我們的數(shù)據(jù)源中獲取Shiro需要的驗(yàn)證信息??梢哉f,Realm是專用于安全框架的DAO.
一、認(rèn)證實(shí)現(xiàn)
正如前文所提到的,Shiro的認(rèn)證過程最終會(huì)交由Realm執(zhí)行,這時(shí)會(huì)調(diào)用Realm的getAuthenticationInfo(token)方法。
該方法主要執(zhí)行以下操作:
1、檢查提交的進(jìn)行認(rèn)證的令牌信息
2、根據(jù)令牌信息從數(shù)據(jù)源(通常為數(shù)據(jù)庫(kù))中獲取用戶信息
3、對(duì)用戶信息進(jìn)行匹配驗(yàn)證。
4、驗(yàn)證通過將返回一個(gè)封裝了用戶信息的AuthenticationInfo實(shí)例。
5、驗(yàn)證失敗則拋出AuthenticationException異常信息。
而在我們的應(yīng)用程序中要做的就是自定義一個(gè)Realm類,繼承AuthorizingRealm抽象類,重載doGetAuthenticationInfo (),重寫獲取用戶信息的方法。
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
User user = accountManager.findUserByUserName(token.getUsername());
if (user != null) {
return new SimpleAuthenticationInfo(user.getUserName(), user.getPassword(), getName());
} else {
return null;
}
}
二、授權(quán)實(shí)現(xiàn)
而授權(quán)實(shí)現(xiàn)則與認(rèn)證實(shí)現(xiàn)非常相似,在我們自定義的Realm中,重載doGetAuthorizationInfo()方法,重寫獲取用戶權(quán)限的方法即可。
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
String userName = (String) principals.fromRealm(getName()).iterator().next();
User user = accountManager.findUserByUserName(userName);
if (user != null) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
for (Group group : user.getGroupList()) {
info.addStringPermissions(group.getPermissionList());
}
return info;
} else {
return null;
}
}
相關(guān)文章
Ubuntu無(wú)網(wǎng)絡(luò)標(biāo)識(shí)的問題及解決
這篇文章主要介紹了Ubuntu無(wú)網(wǎng)絡(luò)標(biāo)識(shí)的問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
apache啟用gzip壓縮的實(shí)現(xiàn)方法
對(duì)于部署在Linux服務(wù)器上的PHP程序,在服務(wù)器支持的情況下,我們建議你開啟使用Gzip Web壓縮,以前腳本之家介紹了iis中的開啟方法,這篇文章主要介紹了linux中apache的開啟方法2013-06-06
使用 libevent 和 libev 提高網(wǎng)絡(luò)應(yīng)用性能的方法
構(gòu)建現(xiàn)代的服務(wù)器應(yīng)用程序需要以某種方法同時(shí)接收數(shù)百、數(shù)千甚至數(shù)萬(wàn)個(gè)事件,無(wú)論它們是內(nèi)部請(qǐng)求還是網(wǎng)絡(luò)連接,都要有效地處理它們的操作2011-05-05
Apache加速模塊mod_pagespeed安裝使用詳細(xì)介紹
這篇文章主要介紹了Apache加速模塊mod_pagespeed安裝使用詳細(xì)介紹,需要的朋友可以參考下2014-03-03
Linux系統(tǒng)下如何實(shí)現(xiàn)修改主機(jī)名
這篇文章主要介紹了Linux系統(tǒng)下如何實(shí)現(xiàn)修改主機(jī)名問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Linux中搭建完整的samba服務(wù)器全攻略(centos版)
smb是一個(gè)協(xié)議名,它能被用于Web連接和客戶端與服務(wù)器之間的信息溝通。這篇文章主要介紹了Linux中搭建samba服務(wù)器全攻略(centos版),需要的朋友可以參考下2018-11-11
ubuntu中編寫shell腳本開機(jī)自動(dòng)啟動(dòng)(推薦)
這篇文章主要介紹了ubuntu中編寫shell腳本開機(jī)自動(dòng)啟動(dòng),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
使用Apache?Hudi?加速傳統(tǒng)的批處理模式的方法
這篇文章主要介紹了Apache?Hudi?如何加速傳統(tǒng)的批處理模式,借助Apache Hudi,我們希望在將數(shù)據(jù)攝取到數(shù)據(jù)湖中的同時(shí),找到更好的重復(fù)數(shù)據(jù)刪除和數(shù)據(jù)版本控制優(yōu)化解決方案,需要的朋友可以參考下2022-04-04

