When the server ip of the auth server is incorrectly written, or the server is unavailable, the timeout time configured according to the document does not work, and the default is like 30 seconds.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

The following link is a description of the problem, take a look https://github.com/spring-cloud/spring-cloud-gateway/issues/3652

Comment From: kse-music

You can try define implements JwkSetUriJwtDecoderBuilderCustomizerinterface like so ``` @Component public class CustomJwkSetUriJwtDecoderBuilderCustomizer implements JwkSetUriJwtDecoderBuilderCustomizer {

    @Override
    public void customize(NimbusJwtDecoder.JwkSetUriJwtDecoderBuilder builder) {
        RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
        restTemplateBuilder.connectTimeout(Duration.ofSeconds(60));
        builder.restOperations(restTemplateBuilder.connectTimeout(Duration.ofSeconds(10)).build());
    }

}

**Comment From: hogger0**

> You can try define implements `JwkSetUriJwtDecoderBuilderCustomizer `interface like so
> 
> ```
>   @Component
>    public class CustomJwkSetUriJwtDecoderBuilderCustomizer implements JwkSetUriJwtDecoderBuilderCustomizer {
> 
>        @Override
>        public void customize(NimbusJwtDecoder.JwkSetUriJwtDecoderBuilder builder) {
>            RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
>            restTemplateBuilder.connectTimeout(Duration.ofSeconds(60));
>            builder.restOperations(restTemplateBuilder.connectTimeout(Duration.ofSeconds(10)).build());
>        }
>        
>    }
> ```

It seems to be the same result。

**Comment From: hogger0**

> You can try define implements `JwkSetUriJwtDecoderBuilderCustomizer `interface like so
> 
> ```
>   @Component
>    public class CustomJwkSetUriJwtDecoderBuilderCustomizer implements JwkSetUriJwtDecoderBuilderCustomizer {
> 
>        @Override
>        public void customize(NimbusJwtDecoder.JwkSetUriJwtDecoderBuilder builder) {
>            RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
>            restTemplateBuilder.connectTimeout(Duration.ofSeconds(60));
>            builder.restOperations(restTemplateBuilder.connectTimeout(Duration.ofSeconds(10)).build());
>        }
>        
>    }
> ```

```java
@Component
public class CustomJwkSetUriJwtDecoderBuilderCustomizer implements JwkSetUriJwtDecoderBuilderCustomizer {
    @Override
    public void customize(NimbusJwtDecoder.JwkSetUriJwtDecoderBuilder builder) {
        RestTemplateBuilder restTemplateBuilder = new RestTemplateBuilder();
        restTemplateBuilder.setConnectTimeout(Duration.ofSeconds(10));
        restTemplateBuilder.setReadTimeout(Duration.ofSeconds(10));
        RestTemplate build = restTemplateBuilder.build();
        builder.restOperations(build);
    }
}
[ERROR] 2024-12-20 15:02:12.269 [reactor-http-nio-7] c.i.i.g.h.GlobalExceptionHandler [gateway,67651656d28957bf798c11180b1db5ef,798c11180b1db5ef,TID: N/A] - connection timed out after 30000 ms: /192.168.60.108:8501
[ERROR] 2024-12-20 15:02:12.270 [reactor-http-nio-7] c.i.i.g.h.GlobalExceptionHandler [gateway,67651656d28957bf798c11180b1db5ef,798c11180b1db5ef,TID: N/A] - connection timed out after 30000 ms: /192.168.60.108:8501

Comment From: kse-music

If you use Reactive please define JwkSetUriReactiveJwtDecoderBuilderCustomizer implements like so

    @Component
    public class CustomJwkSetUriReactiveJwtDecoderBuilderCustomizer implements JwkSetUriReactiveJwtDecoderBuilderCustomizer {

        @Override
        public void customize(NimbusReactiveJwtDecoder.JwkSetUriReactiveJwtDecoderBuilder builder) {
            HttpClient httpClient = HttpClient.create().responseTimeout(Duration.ofSeconds(10))
                    .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) Duration.ofSeconds(10).toMillis());
            ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);
            builder.webClient(WebClient.builder().clientConnector(connector).build());
        }
    }

Comment From: hogger0

@Override public void customize(NimbusReactiveJwtDecoder.JwkSetUriReactiveJwtDecoderBuilder builder) { HttpClient httpClient = HttpClient.create().responseTimeout(Duration.ofSeconds(10)) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) Duration.ofSeconds(10).toMillis()); ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient); builder.webClient(WebClient.builder().clientConnector(connector).build()); }

All right ,as expected。 thank you。