是否可以使Spring的缓存框架了解请求上下文的身份验证状态,还是更容易推出自己的缓存解决方案?

最佳答案

不管我发现用例超级奇怪,您都可以对几乎可以与SpEL一起使用的任何东西进行条件缓存。而且,由于您可以使用SpEL调用任何所需的方法,因此您可以使用。

我意识到这比应该做的难,但是以下工作可以解决。首先创建一个进行检查的静态方法(您可以使用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) { ... }


当前有两个问题:


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

关于java - 绕过@Cacheable处理(未认证的)请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34366465/

10-08 23:24