我们实现了一个名为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有一个授权器实例变量。它似乎是使用第一个授权者对象,而不是应该使用新用户创建的新对象,这使我相信它正在被缓存。有没有办法关闭这个缓存?这是正在发生的事情还是其他事情?如果使用正确的用户进行检查,则会从数据库中正确检索权限。我该如何解决这个问题?
提前谢谢你。