1.4. 带有安全缓存的代码执行
当您配置 Data Grid 授权,然后构建 DefaultCacheManager 时,它会返回 SecureCache,在调用底层缓存的任何操作前检查安全上下文。SecureCache 还确保应用程序无法检索较低级别的不安全对象,如 DataContainer。因此,您必须使用具有所需授权的身份执行代码。
在 Java 中,使用特定身份执行代码通常意味着将代码嵌套在 PrivilegedAction 中,如下所示:
使用 Java 8,您可以按如下所示简化前面的调用:
Security.doAs(mySubject, PrivilegedAction<String>() -> cache.put("key", "value"));
Security.doAs(mySubject, PrivilegedAction<String>() -> cache.put("key", "value"));
前面的调用使用 Security.doAs () 方法,而不是 Subject.doAs ()。您可以将任一方法与 Data Grid 搭配使用,但 Security.doAs () 提供了更好的性能。
如果您需要当前的 Subject,请使用以下调用从 Data Grid 上下文或从 AccessControlContext 中检索它:
Security.getSubject();
Security.getSubject();