我将实现在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);
}
1条答案
按热度按时间kdfy810k1#
其目的是将JWT检查推迟到首次使用
SupplierJwtDecoder
时,而不是查找发布者位置如果您有一个本地构建的应用程序,那么您的目标之一就是启动时间,如果SpringSecurity在启动时查找发布者位置,这就是为什么SupplierJwtDecoder
被创造出来的原因之一。您可以获得有关相关问题的更多详细信息:https://github.com/spring-projects/spring-security/issues/9991