[英]Apache Shiro: ClassCastException on Realm
好的,我正式感到困惑。
在Shiro,我有自己的領域(DatastoreRealm),它擴展了AuthorizingRealm。 在我的DatastoreRealm中,我有方法“ clearCachedAuthorizationInfo ”,它允許我清除用戶權限等,然后在這些權限即時更改時重新檢查。
為了獲得該方法,我必須訪問我的DatastoreRealm對象。 我用以下方式做到這一點......
private static Realm lookupRealm(String realmName) {
SecurityManager securityManager = SecurityUtils.getSecurityManager();
RealmSecurityManager realmSecurityManager = (RealmSecurityManager) securityManager;
Collection<Realm> realms = realmSecurityManager.getRealms();
for (Realm realm : realms) {
if (realm.getName().equalsIgnoreCase(realmName)) {
log.info("look up realm name is : " + realm.getName());
return realm;
}
}
return null; }
這似乎工作正常。 它返回一個“DatastoreRealm”對象。
雖然當我稱這種方法時,我被迫做以下事情......
DatastoreRealm dsRealm = (DatastoreRealm) lookupRealm("rfRealm");
拋出“ ClassCastException ”告訴我......
rf.gae.DatastoreRealm cannot be cast to rf.gae.DatastoreRealm
怎么/為什么會這樣?
如果我不投射,只是使用“ Realm ”對象,我就無法使用“ clearCachedAuthorizationInfo ”!
先謝謝您的幫助!
好了多一點挖掘,我發現了問題。
我正在使用的Web框架具有“熱重新加載”類的能力,這可以防止在每次代碼更改時重新啟動服務器。
這個問題是新的類加載器加載編輯的類,因此當嘗試強制轉換時,內存中的類不能轉換為類加載器加載的新類!
對於要轉換的類,它們必須屬於同一類型,並由同一個類加載器加載。
關閉此功能可以糾正我的投射問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.