如何在 grails shiro 中使用缓存权限

Posted

技术标签:

【中文标题】如何在 grails shiro 中使用缓存权限【英文标题】:How to use cache permissions in grails shiro 【发布时间】:2011-05-24 10:35:51 【问题描述】:

每次我调用subject.isPermitted(),它都会向数据库发送一条sql。 我怎样才能缓存它?有什么例子吗?谢谢。


我阅读了 shiro grails 插件的文档,但无法解决。

数据源:

hibernate 
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'

如何将缓存管理器设置为 shiro?我尝试spring.resource,抛出一个错误。

cachemanager 的实例 bean 名称是什么?我还需要其他配置吗?

【问题讨论】:

【参考方案1】:

您需要在 Shiro 的 SecurityManager 上配置一个 org.apache.shiro.cache.CacheManager 实例。大多数 Shiro 开箱即用的 Realm 实现都知道如何使用已配置的 CacheManager,并且会自动缓存从 Realm 权限查找返回的 AuthorizationInfo。

我不确定如何使用 Grails Shiro 插件执行此操作,但在 Shiro 的 INI 中,您可以这样做:

[main]
...
cacheManager = com.my.implementation.of.CacheManager
securityManager.cacheManager = $cacheManager
...

我建议询问 grails-user 邮件列表,看看是否有更“grailsy”的方式来配置 Grails Shiro 插件。

HTH,

莱斯

【讨论】:

@Les - 我也需要这样做,我想使用 grails 附带的内置缓存支持,但我认为 grails-shriro 插件的实现方式是不可能的。 Grails shiro 插件不扩展任何内置领域(例如 AuthorizingRealm),而是实现了它自己的领域接口。因此,为了进行缓存,我们必须在领域本身中手动进行,不能依赖 shiro 为我们缓存身份验证信息

以上是关于如何在 grails shiro 中使用缓存权限的主要内容,如果未能解决你的问题,请参考以下文章

您可以在没有角色和权限的情况下将 Shiro 用于 Grails 吗?

如何限制grails shiro security中的操作

Grails Shiro LDAP用户/角色身份验证:如何/如何捕获和存储以供重用

如何在我的项目中实现 Grails 的 Shiro 安全性

如何使用 shiro 在 grails 2.0 中实现 BasicHttpAuthentication?有啥亮眼的例子吗?

SpringBoot项目+Shiro(权限框架)+Redis(缓存)集成