我正在使用Apache Shiro(v1.2.3),並且我正確設置了用戶名/密碼認證,並且它正在工作(我正在將密碼哈希和salt存儲在遠程數據庫中)。我現在試圖使用角色設置權限。我有一個延伸AuthorizingRealm
的單一領域,例如Apache Shiro角色和權限不起作用
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
// no problems here...
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principles) {
Set<String> roles = // get the roles for this user from the DB
LOG.info("Found roles => " + roles.toString());
return new SimpleAuthorizationInfo(roles);
}
}
我shiro.ini
看起來像這樣:
[主要]
MYREALM = ie.enki.closing.users.MyRealmcredentialsMatcher = org.apache.shiro.authc。憑證.Sha256CredentialsMatcher
credentialsMatcher.storedCredentialsHexEncoded = false
credentialsMatcher.hashIterations = 1024myRealm.credentialsMatcher = $ credentialsMatcher
的CacheManager = org.ehcache.integrations.shiro.EhcacheShiroManager
securityManager.cacheManager = $ CacheManager的[角色]
管理員= *
人員= resource_1:action_1
ehcache bein的相關啓動日誌記錄報告克設置正確,但它確實之前,它也提到了這一點:
[主要] INFO org.apache.shiro.realm.text.IniRealm - IniRealm限定,但 沒有定義[用戶]部分。這個領域不會是 與任何用戶填充,並且假定他們將以編程方式填充 。用戶必須爲此Realm實例定義爲 有用。
[main] INFO org.apache.shiro.realm.AuthorizingRealm - 沒有緩存 或cacheManager屬性已設置。授權緩存不能獲得 。
...
一些的Ehcache安裝程序日誌記錄...
在我的測試,currentUser.isPermitted("resource_1:action_1")
返回false
即使我的記錄說,我確實有admin
作用(我與staff
角色試過太)。
四郎文檔談論像shiro.ini
角色設置一個[用戶]部分和分配給用戶:
[用戶]
some_user =密碼,基於role1,role2所
...但我不想在ini文件中定義用戶及其密碼。這就是我的數據庫的用途。我誤解了配置中的某些內容嗎?
再次瀏覽文檔後,[角色]部分似乎只適用於使用[users]部分定義少量靜態用戶的情況。如果這是真的,你如何將角色與數據庫中定義的用戶的權限相關聯。 docs that might reveal this info不完整。