Apache Shiro-isPermitt()方法和错误的授权器类存在问题

Apache Shiro-isPermitt()方法和错误的授权器类存在问题,apache,shiro,Apache,Shiro,我们实现了一个名为AuthorizerImpl的类,它包含两个对象:AuthorizingRealm和Subject。我们实现了一个isPermitt()方法,该方法随后对主题调用isPermitt()方法。我们的代码如下所示: // UserContext object uc is passed in here AuthorizerImpl auth = new AuthorizerImpl(uc.getUser()); auth.isPermitted("winnebago:drive:ea

我们实现了一个名为AuthorizerImpl的类,它包含两个对象:AuthorizingRealm和Subject。我们实现了一个isPermitt()方法,该方法随后对主题调用isPermitt()方法。我们的代码如下所示:

// UserContext object uc is passed in here
AuthorizerImpl auth = new AuthorizerImpl(uc.getUser());
auth.isPermitted("winnebago:drive:eagle5");
我们最初使用上述代码登录并验证用户的权限。用户第一次登录时,可以说是“基本用户”。某些屏幕特定于某些用户,因此我们使用不同的uc.getUser()再次调用上述代码,以验证新用户的权限。但我看到的是,后端Shiro代码正在使用前一个用户检查权限,而不是我传递到isPermitt()方法中的新用户。每次调用“newauthorimpl(uc.getUser())”时,我们都在创建一个新的主题和AuthorizingRealm,它们是AuthorizingRealm对象内的实例变量。我的印象是,当我创建一个新的AuthorizerImpl时,它应该使用我们在构造函数中创建的新主题和领域。然而,Shiro似乎正在缓存以前使用过的领域对象,并且正在使用它?我们正在使用DefaultSecurityManager。在进行一些调试之后,我注意到DefaultSecurityManager有一个authorizer实例变量。它似乎使用了第一个authorizer对象,而不是应该与新用户一起创建的新对象,这让我相信它正在被缓存。有没有办法关闭此缓存?这是正在发生的事情还是其他什么?如果使用正确的用户进行检查,则将从数据库中正确检索权限。我如何解决这个问题

先谢谢你