spring-security 延迟初始化JWTDecoder的SupplierJwtDecoder的用途是什么

4dc9hkyq  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(73)

我将实现在OAuth2资源服务器中使用的自定义JwtDecoder
在研究JwtDecoder的默认行为时,我发现SupplierJwtDecoder会延迟初始化JWTDecoder
使用委托模式延迟初始化有什么好处?它似乎也会导致同步问题。

@Override
public Jwt decode(String token) throws JwtException {
    if (this.delegate == null) {
        synchronized (this.jwtDecoderSupplier) {
            if (this.delegate == null) {
                try {
                    this.delegate = this.jwtDecoderSupplier.get();
                } catch (Exception ex) {
                    throw wrapException(ex);
                }
            }
        }
    }
    return this.delegate.decode(token);
}
kdfy810k

kdfy810k1#

其目的是将JWT检查推迟到首次使用SupplierJwtDecoder时,而不是查找发布者位置如果您有一个本地构建的应用程序,那么您的目标之一就是启动时间,如果SpringSecurity在启动时查找发布者位置,这就是为什么SupplierJwtDecoder被创造出来的原因之一。
您可以获得有关相关问题的更多详细信息:https://github.com/spring-projects/spring-security/issues/9991

相关问题