From 63c5d7ba650e0434a8c6c1bf906b96e4101e07b5 Mon Sep 17 00:00:00 2001 From: Yohei Kishimoto Date: Sat, 6 Dec 2025 17:12:18 +0900 Subject: [PATCH] throw original exception to keep compatibility with common RestTemplate Signed-off-by: Yohei Kishimoto --- .../kerberos/client/KerberosRestTemplate.java | 3 +++ .../client/KerberosRestTemplateTests.java | 17 +++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/kerberos/kerberos-client/src/main/java/org/springframework/security/kerberos/client/KerberosRestTemplate.java b/kerberos/kerberos-client/src/main/java/org/springframework/security/kerberos/client/KerberosRestTemplate.java index 23bfe1b834f..bf2a9491880 100644 --- a/kerberos/kerberos-client/src/main/java/org/springframework/security/kerberos/client/KerberosRestTemplate.java +++ b/kerberos/kerberos-client/src/main/java/org/springframework/security/kerberos/client/KerberosRestTemplate.java @@ -244,6 +244,9 @@ public T run() { }); } + catch (RestClientException ex) { + throw ex; + } catch (Exception ex) { throw new RestClientException("Error running rest call", ex); } diff --git a/kerberos/kerberos-client/src/test/java/org/springframework/security/kerberos/client/KerberosRestTemplateTests.java b/kerberos/kerberos-client/src/test/java/org/springframework/security/kerberos/client/KerberosRestTemplateTests.java index 852c9b6083b..c006d90df1a 100644 --- a/kerberos/kerberos-client/src/test/java/org/springframework/security/kerberos/client/KerberosRestTemplateTests.java +++ b/kerberos/kerberos-client/src/test/java/org/springframework/security/kerberos/client/KerberosRestTemplateTests.java @@ -19,6 +19,8 @@ import java.io.File; import java.nio.charset.StandardCharsets; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import okhttp3.mockwebserver.Dispatcher; import okhttp3.mockwebserver.MockResponse; @@ -33,8 +35,10 @@ import org.springframework.http.MediaType; import org.springframework.security.kerberos.test.KerberosSecurityTestcase; import org.springframework.security.kerberos.test.MiniKdc; +import org.springframework.web.client.HttpClientErrorException; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; class KerberosRestTemplateTests extends KerberosSecurityTestcase { @@ -72,6 +76,8 @@ void setUp() throws Exception { String serverPrincipal = "HTTP/localhost"; File serverKeytab = new File(workDir, "server.keytab"); kdc.createPrincipal(serverKeytab, serverPrincipal); + + setUpClient(); } @AfterEach @@ -81,13 +87,20 @@ void tearDown() throws Exception { @Test void sendsNegotiateHeader() { - setUpClient(); String s = this.restTemplate.getForObject(this.baseUrl + "/get", String.class); assertThat(s).isEqualTo(helloWorld); } + @Test + void throwsOriginalException() { + assertThatThrownBy(() -> restTemplate.getForObject(this.baseUrl + "/notfound", String.class)) + .isInstanceOf(HttpClientErrorException.NotFound.class); + } + private void setUpClient() { - this.restTemplate = new KerberosRestTemplate(this.clientKeytab.getAbsolutePath(), this.clientPrincipal); + Map loginOptions = new HashMap<>(); + loginOptions.put("refreshKrb5Config", "true"); + this.restTemplate = new KerberosRestTemplate(this.clientKeytab.getAbsolutePath(), this.clientPrincipal, loginOptions); } private MockResponse getRequest(RecordedRequest request, byte[] body, String contentType) {