Spring安全框架中的延迟模式

lvmkulzt  于 12个月前  发布在  Spring
关注(0)|答案(1)|浏览(122)

最近,我研究了Spring的安全性,有一些类和方法命名为Deferring-Deferred-
对于实施例

  • DeferredSecurityContext
  • SupplierDeferredSecurityContext
  • 延迟观察React授权管理器
  • 延迟观察授权管理器


类或方法的常见模式是使用Supplier函数接口和从提供者函数获取对象。像这样。

final class DeferringObservationAuthorizationManager<T> implements AuthorizationManager<T> {

    private final Supplier<AuthorizationManager<T>> delegate;

    DeferringObservationAuthorizationManager(ObjectProvider<ObservationRegistry> provider, AuthorizationManager<T> delegate) {
        this.delegate = SingletonSupplier.of(() -> {
            ObservationRegistry registry = (ObservationRegistry)provider.getIfAvailable(() -> {
                return ObservationRegistry.NOOP;
            });
            return (AuthorizationManager)(registry.isNoop() ? delegate : new ObservationAuthorizationManager(registry, delegate));
        });
    }

    public AuthorizationDecision check(Supplier<Authentication> authentication, T object) {
        return ((AuthorizationManager)this.delegate.get()).check(authentication, object);
    }
}

个字符
我对这个模式很好奇。为什么不直接使用示例?当我们在lambda函数中包含对象并推迟使用时有什么好处吗?

  • 这个模式的目的是什么?
  • 我们从这种模式中得到了什么好处?
  • 有没有好的例子来了解这种模式的好处或解决一些问题?

请告诉我谢谢

cfh9epnr

cfh9epnr1#

延迟(推迟)资源的创建是一种模式,用于优化代码,直到显式请求才创建资源。
因此,您所展示的代码不会创建一个SecurityCContext,直到它被显式地请求,然后才开始创建。在您的另一个示例中,ObservationRegistry也是如此。
这带来了一个小的一次性运行时成本,但好处是,例如缩短服务器的启动时间。

相关问题