好的,我正式感到困惑。
在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; }
这似乎工作正常。它给我一个&#34; DatastoreRealm&#34;对象
虽然我称这种方法时,我不得不做以下事情......
DatastoreRealm dsRealm = (DatastoreRealm) lookupRealm("rfRealm");
引发&#34; ClassCastException &#34;告诉我......
rf.gae.DatastoreRealm cannot be cast to rf.gae.DatastoreRealm
如何/为何发生这种情况???
如果我不弃牌,只需使用&#34; 境界&#34;对象,&#34; clearCachedAuthorizationInfo &#34;我无法使用!
提前感谢您的帮助!
答案 0 :(得分:0)
通过更多的挖掘,我发现了问题。
我正在使用的Web框架能够“热重新加载”类,这可以防止在每次代码更改时重新启动服务器。
这个问题是新的类加载器加载了编辑过的类,因此在尝试强制转换时,内存中的类不能转换为类加载器加载的新类!
对于要转换的类,它们必须属于同一类型,并由同一个类加载器加载。
关闭此功能可以纠正我的演员问题。