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