是否可以使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/