【问题标题】:Bypass @Cacheable for (un)authenticated requests为(未)经过身份验证的请求绕过 @Cacheable
【发布时间】:2015-12-19 01:57:41
【问题描述】:

能否让 Spring 的缓存框架了解请求上下文的身份验证状态,或者更容易推出自己的缓存解决方案?

【问题讨论】:

    标签: java spring-mvc spring-security spring-cache


    【解决方案1】:

    尽管我发现用例非常奇怪,但您可以为几乎所有适用于 SpEL 的东西设置缓存条件。而且由于您可以使用 SpEL 调用任何您想要的方法,所以您可以开始了。

    我意识到它比它应该更难,但以下工作。首先创建一个 static 方法来进行检查(您可以使用 SecurityContextHolder

    public class SecurityChecker {
    
        public static boolean isSecured() {
            // Whatever
            return SecurityContextHolder.getContext().getAuthentication() != null;
        }
    }
    

    然后在您的注释方法中,指定以下内容(假设myCache 应该受到影响):

    @Cacheable(cacheNames = "myCache", condition = "T(com.example.SecurityChecker).isSecured()")
    public Foo doIt(String key) { ... }
    

    目前有两个问题:

    1. 您无法创建元注释以避免一遍又一遍地重复condition 属性(请参阅SPR-13475
    2. SpEL 设置不允许您轻松调用 bean 上的方法(这比调用静态方法更好)。我刚刚为此创建了SPR-13812

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 2013-03-31
      • 2021-05-26
      • 1970-01-01
      相关资源
      最近更新 更多