繁体   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