permissions - 如何清除 Shiro 中主题的缓存

标签 permissions shiro cache-invalidation

Shiro 提供缓存功能,但在我的例子中,我为用户使用动态角色和权限。我需要使特定用户的缓存过期(如果有的话),以便权限更改立即影响用户。

Realm 中有一个方法,但是我如何获取关联领域的实例来调用方法来清除缓存。

最佳答案

我最终在 AuthorizingRealm 的扩展领域中公开了私有(private)方法“clearCachedAuthorizationInfo”。然后只需传递委托(delegate)人即可。

public class MyRealm extends AuthorizingRealm {
    //...
    @Override
    public void clearCachedAuthorizationInfo(PrincipalCollection principals)
    {
        super.clearCachedAuthorizationInfo(principals);
    }
    //...
}

清除授权缓存:

realm.clearCachedAuthorizationInfo( SecurityUtils.getSubject().getPrincipals() );

我认为这有点更清洁/更安全,因为此方法对缓存上的 null 进行了额外检查,并且将确保您获得对缓存的引用(如果缓存存在)。简单地调用 getAuthorizationCache() 并不能做到这一点,它可能会也可能不会一直有效。

您确实需要维护对领域的引用。为此,我通过 Spring 初始化 Shiro,然后在我需要的任何地方将其作为 Singleton bean 注入(inject)。

关于permissions - 如何清除 Shiro 中主题的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22706632/

相关文章:

Android perimision "user' s private information", "your personal information", "read sensitive log data"

powershell - 更改注册表文件夹权限会引发访问被拒绝

java - 将 apache Shiro 与 Spring MVC 非 xml 项目一起使用

java - Apache Shiro 用于桌面应用程序?

javascript - 强制浏览器清除 Angular 环境中的缓存

c# - 使用 CloudFront 的无效路径在 C# 中创建失效

caching - 原则 2 结果缓存失效

rest - 如何使用其余端点获取 Sharepoint 中文件/文件夹/文档的权限级别?

ios - 如何询问 UIUserNotificationSettings 类型

grails - 如何解决grails插件依赖关系