簡體   English   中英

Apache Shiro:Realm上的ClassCastException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM