1

我们已经实现了一个名为 AuthorizerImpl 的类,它包含两个对象:一个 AuthorizingRealm 和一个 Subject。我们已经实现了一个 isPermitted() 方法,该方法随后调用了该主题的 isPermitted() 方法。我们的代码看起来像这样:

// UserContext object uc is passed in here
AuthorizerImpl auth = new AuthorizerImpl(uc.getUser());
auth.isPermitted("winnebago:drive:eagle5");

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

先感谢您。

4

0 回答 0