From 005e7c00111733babe9d0ed0130c398497483625 Mon Sep 17 00:00:00 2001 From: Alexey Markevich Date: Tue, 17 Sep 2019 09:54:09 +0300 Subject: [PATCH] cxf-rt-rs-security-jose: do not throw JwkException twice --- .../cxf/rs/security/jose/common/JoseUtils.java | 8 ++++++-- .../apache/cxf/rs/security/jose/jwk/JwkUtils.java | 11 ++++------- .../cxf/rs/security/jose/jwk/JwkUtilsTest.java | 13 +++++++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/common/JoseUtils.java b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/common/JoseUtils.java index 330543beefd..2f0bb75b7d7 100644 --- a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/common/JoseUtils.java +++ b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/common/JoseUtils.java @@ -19,6 +19,7 @@ package org.apache.cxf.rs.security.jose.common; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -156,12 +157,15 @@ public static boolean checkBooleanProperty(JoseHeaders headers, Properties props // Copied from JAX-RS RT FRONTEND ResourceUtils // - public static InputStream getResourceStream(String loc, Bus bus) throws Exception { + public static InputStream getResourceStream(String loc, Bus bus) throws IOException { URL url = getResourceURL(loc, bus); return url == null ? null : url.openStream(); } - public static URL getResourceURL(String loc, Bus bus) throws Exception { + public static URL getResourceURL(String loc, Bus bus) throws IOException { + if (loc == null) { + return null; + } URL url = null; if (loc.startsWith(CLASSPATH_PREFIX)) { String path = loc.substring(CLASSPATH_PREFIX.length()); diff --git a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java index 59d84bd9f9f..888837e6d2e 100644 --- a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java +++ b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java @@ -271,15 +271,12 @@ public static JsonWebKeys loadJwkSet(Properties props, Bus bus, JweDecryptionPro String keyContent = null; String keyStoreLoc = props.getProperty(JoseConstants.RSSEC_KEY_STORE_FILE); if (keyStoreLoc != null) { - try { - InputStream is = JoseUtils.getResourceStream(keyStoreLoc, bus); - if (is == null) { + try (InputStream isResource = JoseUtils.getResourceStream(keyStoreLoc, bus)) { + if (isResource == null) { throw new JwkException("Error in loading keystore location: " + keyStoreLoc); } - try (InputStream isResource = is) { - keyContent = IOUtils.readStringFromStream(isResource); - } - } catch (Exception ex) { + keyContent = IOUtils.readStringFromStream(isResource); + } catch (IOException ex) { throw new JwkException(ex); } } else { diff --git a/rt/rs/security/jose-parent/jose/src/test/java/org/apache/cxf/rs/security/jose/jwk/JwkUtilsTest.java b/rt/rs/security/jose-parent/jose/src/test/java/org/apache/cxf/rs/security/jose/jwk/JwkUtilsTest.java index 06bff16bfbc..2c0bb14be97 100644 --- a/rt/rs/security/jose-parent/jose/src/test/java/org/apache/cxf/rs/security/jose/jwk/JwkUtilsTest.java +++ b/rt/rs/security/jose-parent/jose/src/test/java/org/apache/cxf/rs/security/jose/jwk/JwkUtilsTest.java @@ -21,7 +21,9 @@ import java.math.BigInteger; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; +import java.util.Properties; +import org.apache.cxf.rs.security.jose.common.JoseConstants; import org.apache.cxf.rs.security.jose.common.JoseException; import org.apache.cxf.rs.security.jose.common.JoseUtils; import org.apache.cxf.rs.security.jose.common.KeyManagementUtils; @@ -189,5 +191,16 @@ public void testEc521KeyThumbprint() throws Exception { String thumbprint = JwkUtils.getThumbprint(EC_521_KEY); assertEquals("rz4Ohmpxg-UOWIWqWKHlOe0bHSjNUFlHW5vwG_M7qYg", thumbprint); } + @Test + public void testLoadPublicJwkSet() throws Exception { + final Properties props = new Properties(); + props.setProperty(JoseConstants.RSSEC_KEY_STORE_FILE, "unavailable"); + try { + JwkUtils.loadPublicJwkSet(null, props); + fail(); + } catch (JwkException e) { + assertNull(e.getCause()); + } + } } \ No newline at end of file