Merge branch '5.7.x' into 5.8.x

This commit is contained in:
Josh Cummings 2023-04-04 13:32:04 -06:00
commit 5ffebaf12b
No known key found for this signature in database
GPG Key ID: A306A51F43B8E5A5
1 changed files with 12 additions and 17 deletions

View File

@ -18,6 +18,8 @@ package org.springframework.security.oauth2.jwt;
import java.util.function.Supplier; import java.util.function.Supplier;
import org.springframework.util.function.SingletonSupplier;
/** /**
* A {@link JwtDecoder} that lazily initializes another {@link JwtDecoder} * A {@link JwtDecoder} that lazily initializes another {@link JwtDecoder}
* *
@ -26,12 +28,17 @@ import java.util.function.Supplier;
*/ */
public final class SupplierJwtDecoder implements JwtDecoder { public final class SupplierJwtDecoder implements JwtDecoder {
private final Supplier<JwtDecoder> jwtDecoderSupplier; private final Supplier<JwtDecoder> delegate;
private volatile JwtDecoder delegate;
public SupplierJwtDecoder(Supplier<JwtDecoder> jwtDecoderSupplier) { public SupplierJwtDecoder(Supplier<JwtDecoder> jwtDecoderSupplier) {
this.jwtDecoderSupplier = jwtDecoderSupplier; this.delegate = SingletonSupplier.of(() -> {
try {
return jwtDecoderSupplier.get();
}
catch (Exception ex) {
throw wrapException(ex);
}
});
} }
/** /**
@ -39,19 +46,7 @@ public final class SupplierJwtDecoder implements JwtDecoder {
*/ */
@Override @Override
public Jwt decode(String token) throws JwtException { public Jwt decode(String token) throws JwtException {
if (this.delegate == null) { return this.delegate.get().decode(token);
synchronized (this.jwtDecoderSupplier) {
if (this.delegate == null) {
try {
this.delegate = this.jwtDecoderSupplier.get();
}
catch (Exception ex) {
throw wrapException(ex);
}
}
}
}
return this.delegate.decode(token);
} }
private JwtDecoderInitializationException wrapException(Exception ex) { private JwtDecoderInitializationException wrapException(Exception ex) {