From 473dedb9addae1c8f048df8333b7c08a16f49996 Mon Sep 17 00:00:00 2001 From: Steve Riesenberg Date: Fri, 25 Jun 2021 09:14:55 -0500 Subject: [PATCH] Revert "Polish JdbcRegisteredClientRepository, JdbcOAuth2AuthorizationConsentService, JdbcOAuth2AuthorizationService" This reverts commit e5e391db --- ...JdbcOAuth2AuthorizationConsentService.java | 24 +- .../JdbcOAuth2AuthorizationService.java | 5 +- .../JdbcRegisteredClientRepository.java | 278 ++++++++---------- .../JdbcRegisteredClientRepositoryTests.java | 15 +- 4 files changed, 146 insertions(+), 176 deletions(-) diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationConsentService.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationConsentService.java index ef6a5af1..d1234319 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationConsentService.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationConsentService.java @@ -56,7 +56,7 @@ import org.springframework.util.StringUtils; * @see RowMapper * @since 0.1.2 */ -public class JdbcOAuth2AuthorizationConsentService implements OAuth2AuthorizationConsentService { +public final class JdbcOAuth2AuthorizationConsentService implements OAuth2AuthorizationConsentService { // @formatter:off private static final String COLUMN_NAMES = "registered_client_id, " @@ -169,7 +169,7 @@ public class JdbcOAuth2AuthorizationConsentService implements OAuth2Authorizatio * @param authorizationConsentRowMapper the {@link RowMapper} used for mapping the current * row in {@code ResultSet} to {@link OAuth2AuthorizationConsent} */ - public final void setAuthorizationConsentRowMapper(RowMapper authorizationConsentRowMapper) { + public void setAuthorizationConsentRowMapper(RowMapper authorizationConsentRowMapper) { Assert.notNull(authorizationConsentRowMapper, "authorizationConsentRowMapper cannot be null"); this.authorizationConsentRowMapper = authorizationConsentRowMapper; } @@ -182,24 +182,12 @@ public class JdbcOAuth2AuthorizationConsentService implements OAuth2Authorizatio * @param authorizationConsentParametersMapper the {@code Function} used for mapping * {@link OAuth2AuthorizationConsent} to a {@code List} of {@link SqlParameterValue} */ - public final void setAuthorizationConsentParametersMapper( + public void setAuthorizationConsentParametersMapper( Function> authorizationConsentParametersMapper) { Assert.notNull(authorizationConsentParametersMapper, "authorizationConsentParametersMapper cannot be null"); this.authorizationConsentParametersMapper = authorizationConsentParametersMapper; } - protected final JdbcOperations getJdbcOperations() { - return this.jdbcOperations; - } - - protected final RowMapper getAuthorizationConsentRowMapper() { - return this.authorizationConsentRowMapper; - } - - protected final Function> getAuthorizationConsentParametersMapper() { - return this.authorizationConsentParametersMapper; - } - /** * The default {@link RowMapper} that maps the current row in * {@code ResultSet} to {@link OAuth2AuthorizationConsent}. @@ -235,11 +223,6 @@ public class JdbcOAuth2AuthorizationConsentService implements OAuth2Authorizatio } return builder.build(); } - - protected final RegisteredClientRepository getRegisteredClientRepository() { - return this.registeredClientRepository; - } - } /** @@ -261,7 +244,6 @@ public class JdbcOAuth2AuthorizationConsentService implements OAuth2Authorizatio parameters.add(new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToDelimitedString(authorities, ","))); return parameters; } - } } diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationService.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationService.java index 58e47adc..3608fc27 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationService.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/JdbcOAuth2AuthorizationService.java @@ -29,7 +29,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Function; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.dao.DataRetrievalFailureException; @@ -429,9 +428,10 @@ public class JdbcOAuth2AuthorizationService implements OAuth2AuthorizationServic return this.objectMapper; } + @SuppressWarnings("unchecked") private Map parseMap(String data) { try { - return this.objectMapper.readValue(data, new TypeReference>() {}); + return this.objectMapper.readValue(data, Map.class); } catch (Exception ex) { throw new IllegalArgumentException(ex.getMessage(), ex); } @@ -527,6 +527,7 @@ public class JdbcOAuth2AuthorizationService implements OAuth2AuthorizationServic return parameters; } + @SuppressWarnings("unchecked") private String writeMap(Map data) { try { return this.objectMapper.writeValueAsString(data); diff --git a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java index 84e2f842..8ce4df77 100644 --- a/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java +++ b/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepository.java @@ -32,7 +32,7 @@ import java.util.Map; import java.util.Set; import java.util.function.Function; -import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.ArgumentPreparedStatementSetter; @@ -95,7 +95,17 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor * @param jdbcOperations the JDBC operations */ public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations) { - this(jdbcOperations, new DefaultLobHandler()); + this(jdbcOperations, new ObjectMapper()); + } + + /** + * Constructs a {@code JdbcRegisteredClientRepository} using the provided parameters. + * + * @param jdbcOperations the JDBC operations + * @param objectMapper the object mapper + */ + public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations, ObjectMapper objectMapper) { + this(jdbcOperations, new DefaultLobHandler(), objectMapper); } /** @@ -103,16 +113,18 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor * * @param jdbcOperations the JDBC operations * @param lobHandler the handler for large binary fields and large text fields + * @param objectMapper the object mapper */ - public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations, LobHandler lobHandler) { + public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations, LobHandler lobHandler, ObjectMapper objectMapper) { Assert.notNull(jdbcOperations, "jdbcOperations cannot be null"); Assert.notNull(lobHandler, "lobHandler cannot be null"); + Assert.notNull(objectMapper, "objectMapper cannot be null"); this.jdbcOperations = jdbcOperations; this.lobHandler = lobHandler; - DefaultRegisteredClientRowMapper registeredClientRowMapper = new DefaultRegisteredClientRowMapper(); + DefaultRegisteredClientRowMapper registeredClientRowMapper = new DefaultRegisteredClientRowMapper(objectMapper); registeredClientRowMapper.setLobHandler(lobHandler); this.registeredClientRowMapper = registeredClientRowMapper; - this.registeredClientParametersMapper = new DefaultRegisteredClientParametersMapper(); + this.registeredClientParametersMapper = new DefaultRegisteredClientParametersMapper(objectMapper); } /** @@ -120,7 +132,7 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor * * @param registeredClientRowMapper mapper implementation */ - public final void setRegisteredClientRowMapper(RowMapper registeredClientRowMapper) { + public void setRegisteredClientRowMapper(RowMapper registeredClientRowMapper) { Assert.notNull(registeredClientRowMapper, "registeredClientRowMapper cannot be null"); this.registeredClientRowMapper = registeredClientRowMapper; } @@ -130,31 +142,15 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor * * @param registeredClientParametersMapper mapper implementation */ - public final void setRegisteredClientParametersMapper(Function> registeredClientParametersMapper) { + public void setRegisteredClientParametersMapper(Function> registeredClientParametersMapper) { Assert.notNull(registeredClientParametersMapper, "registeredClientParameterMapper cannot be null"); this.registeredClientParametersMapper = registeredClientParametersMapper; } - protected final JdbcOperations getJdbcOperations() { - return this.jdbcOperations; - } - - protected final LobHandler getLobHandler() { - return this.lobHandler; - } - - protected final RowMapper getRegisteredClientRowMapper() { - return this.registeredClientRowMapper; - } - - protected final Function> getRegisteredClientParametersMapper() { - return this.registeredClientParametersMapper; - } - @Override public void save(RegisteredClient registeredClient) { Assert.notNull(registeredClient, "registeredClient cannot be null"); - RegisteredClient foundClient = findBy("id = ? OR client_id = ? OR client_secret = ?", + RegisteredClient foundClient = this.findBy("id = ? OR client_id = ? OR client_secret = ?", registeredClient.getId(), registeredClient.getClientId(), registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)); @@ -196,72 +192,88 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor public static class DefaultRegisteredClientRowMapper implements RowMapper { - private ObjectMapper objectMapper = new ObjectMapper(); + private final ObjectMapper objectMapper; + private LobHandler lobHandler = new DefaultLobHandler(); + public DefaultRegisteredClientRowMapper(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } + + private Set parseList(String s) { + return s != null ? StringUtils.commaDelimitedListToSet(s) : Collections.emptySet(); + } + @Override + @SuppressWarnings("unchecked") public RegisteredClient mapRow(ResultSet rs, int rowNum) throws SQLException { - Set clientScopes = parseList(rs.getString("scopes")); - Set authorizationGrantTypes = parseList(rs.getString("authorization_grant_types")); - Set clientAuthenticationMethods = parseList(rs.getString("client_authentication_methods")); + Set scopes = parseList(rs.getString("scopes")); + Set authGrantTypes = parseList(rs.getString("authorization_grant_types")); + Set clientAuthMethods = parseList(rs.getString("client_authentication_methods")); Set redirectUris = parseList(rs.getString("redirect_uris")); - Timestamp clientIdIssuedAt = rs.getTimestamp("client_id_issued_at"); + Timestamp clientIssuedAt = rs.getTimestamp("client_id_issued_at"); Timestamp clientSecretExpiresAt = rs.getTimestamp("client_secret_expires_at"); - byte[] clientSecretValue = this.lobHandler.getBlobAsBytes(rs, "client_secret"); + byte[] clientSecretBytes = this.lobHandler.getBlobAsBytes(rs, "client_secret"); + String clientSecret = clientSecretBytes != null ? new String(clientSecretBytes, StandardCharsets.UTF_8) : null; RegisteredClient.Builder builder = RegisteredClient .withId(rs.getString("id")) .clientId(rs.getString("client_id")) - .clientIdIssuedAt(clientIdIssuedAt != null ? clientIdIssuedAt.toInstant() : null) - .clientSecret(clientSecretValue != null ? new String(clientSecretValue, StandardCharsets.UTF_8) : null) + .clientIdIssuedAt(clientIssuedAt != null ? clientIssuedAt.toInstant() : null) + .clientSecret(clientSecret) .clientSecretExpiresAt(clientSecretExpiresAt != null ? clientSecretExpiresAt.toInstant() : null) .clientName(rs.getString("client_name")) - .authorizationGrantTypes((grantTypes) -> authorizationGrantTypes.forEach(authGrantType -> - grantTypes.add(AUTHORIZATION_GRANT_TYPE_MAP.get(authGrantType)))) - .clientAuthenticationMethods((methods) -> clientAuthenticationMethods.forEach(clientAuthMethod -> - methods.add(CLIENT_AUTHENTICATION_METHOD_MAP.get(clientAuthMethod)))) - .redirectUris((uris) -> uris.addAll(redirectUris)) - .scopes((scopes) -> scopes.addAll(clientScopes)); + .authorizationGrantTypes(coll -> authGrantTypes.forEach(authGrantType -> + coll.add(AUTHORIZATION_GRANT_TYPE_MAP.get(authGrantType)))) + .clientAuthenticationMethods(coll -> clientAuthMethods.forEach(clientAuthMethod -> + coll.add(CLIENT_AUTHENTICATION_METHOD_MAP.get(clientAuthMethod)))) + .redirectUris(coll -> coll.addAll(redirectUris)) + .scopes(coll -> coll.addAll(scopes)); - RegisteredClient registeredClient = builder.build(); + RegisteredClient rc = builder.build(); - String tokenSettingsValue = rs.getString("token_settings"); - if (tokenSettingsValue != null) { - Map tokenSettingsValues = parseMap(tokenSettingsValue); - TokenSettings tokenSettings = registeredClient.getTokenSettings(); + TokenSettings ts = rc.getTokenSettings(); + ClientSettings cs = rc.getClientSettings(); - Number accessTokenTTL = (Number) tokenSettingsValues.get("access_token_ttl"); - if (accessTokenTTL != null) { - tokenSettings.accessTokenTimeToLive(Duration.ofMillis(accessTokenTTL.longValue())); + try { + String tokenSettingsJson = rs.getString("token_settings"); + if (tokenSettingsJson != null) { + Map m = this.objectMapper.readValue(tokenSettingsJson, Map.class); + + Number accessTokenTTL = (Number) m.get("access_token_ttl"); + if (accessTokenTTL != null) { + ts.accessTokenTimeToLive(Duration.ofMillis(accessTokenTTL.longValue())); + } + + Number refreshTokenTTL = (Number) m.get("refresh_token_ttl"); + if (refreshTokenTTL != null) { + ts.refreshTokenTimeToLive(Duration.ofMillis(refreshTokenTTL.longValue())); + } + + Boolean reuseRefreshTokens = (Boolean) m.get("reuse_refresh_tokens"); + if (reuseRefreshTokens != null) { + ts.reuseRefreshTokens(reuseRefreshTokens); + } } - Number refreshTokenTTL = (Number) tokenSettingsValues.get("refresh_token_ttl"); - if (refreshTokenTTL != null) { - tokenSettings.refreshTokenTimeToLive(Duration.ofMillis(refreshTokenTTL.longValue())); - } + String clientSettingsJson = rs.getString("client_settings"); + if (clientSettingsJson != null) { + Map m = this.objectMapper.readValue(clientSettingsJson, Map.class); - Boolean reuseRefreshTokens = (Boolean) tokenSettingsValues.get("reuse_refresh_tokens"); - if (reuseRefreshTokens != null) { - tokenSettings.reuseRefreshTokens(reuseRefreshTokens); + Boolean requireProofKey = (Boolean) m.get("require_proof_key"); + if (requireProofKey != null) { + cs.requireProofKey(requireProofKey); + } + + Boolean requireUserConsent = (Boolean) m.get("require_user_consent"); + if (requireUserConsent != null) { + cs.requireUserConsent(requireUserConsent); + } } + } catch (JsonProcessingException e) { + throw new IllegalArgumentException(e.getMessage(), e); } - String clientSettingsValue = rs.getString("client_settings"); - if (clientSettingsValue != null) { - Map clientSettingsValues = parseMap(clientSettingsValue); - ClientSettings clientSettings = registeredClient.getClientSettings(); - - Boolean requireProofKey = (Boolean) clientSettingsValues.get("require_proof_key"); - if (requireProofKey != null) { - clientSettings.requireProofKey(requireProofKey); - } - - Boolean requireUserConsent = (Boolean) clientSettingsValues.get("require_user_consent"); - if (requireUserConsent != null) { - clientSettings.requireUserConsent(requireUserConsent); - } - } - - return registeredClient; + return rc; } public final void setLobHandler(LobHandler lobHandler) { @@ -269,95 +281,61 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor this.lobHandler = lobHandler; } - public final void setObjectMapper(ObjectMapper objectMapper) { - Assert.notNull(objectMapper, "objectMapper cannot be null"); - this.objectMapper = objectMapper; - } - - protected final LobHandler getLobHandler() { - return this.lobHandler; - } - - protected final ObjectMapper getObjectMapper() { - return this.objectMapper; - } - - private Set parseList(String s) { - return s != null ? StringUtils.commaDelimitedListToSet(s) : Collections.emptySet(); - } - - private Map parseMap(String data) { - try { - return this.objectMapper.readValue(data, new TypeReference>() {}); - } catch (Exception ex) { - throw new IllegalArgumentException(ex.getMessage(), ex); - } - } - } public static class DefaultRegisteredClientParametersMapper implements Function> { - private ObjectMapper objectMapper = new ObjectMapper(); + private final ObjectMapper objectMapper; - @Override - public List apply(RegisteredClient registeredClient) { - List clientAuthenticationMethodNames = new ArrayList<>(registeredClient.getClientAuthenticationMethods().size()); - for (ClientAuthenticationMethod clientAuthenticationMethod : registeredClient.getClientAuthenticationMethods()) { - clientAuthenticationMethodNames.add(clientAuthenticationMethod.getValue()); - } - - List authorizationGrantTypeNames = new ArrayList<>(registeredClient.getAuthorizationGrantTypes().size()); - for (AuthorizationGrantType authorizationGrantType : registeredClient.getAuthorizationGrantTypes()) { - authorizationGrantTypeNames.add(authorizationGrantType.getValue()); - } - - Instant issuedAt = registeredClient.getClientIdIssuedAt() != null ? - registeredClient.getClientIdIssuedAt() : Instant.now(); - - Timestamp clientSecretExpiresAt = registeredClient.getClientSecretExpiresAt() != null ? - Timestamp.from(registeredClient.getClientSecretExpiresAt()) : null; - - Map clientSettings = new HashMap<>(); - clientSettings.put("require_proof_key", registeredClient.getClientSettings().requireProofKey()); - clientSettings.put("require_user_consent", registeredClient.getClientSettings().requireUserConsent()); - String clientSettingsJson = writeMap(clientSettings); - - Map tokenSettings = new HashMap<>(); - tokenSettings.put("access_token_ttl", registeredClient.getTokenSettings().accessTokenTimeToLive().toMillis()); - tokenSettings.put("reuse_refresh_tokens", registeredClient.getTokenSettings().reuseRefreshTokens()); - tokenSettings.put("refresh_token_ttl", registeredClient.getTokenSettings().refreshTokenTimeToLive().toMillis()); - String tokenSettingsJson = writeMap(tokenSettings); - - return Arrays.asList( - new SqlParameterValue(Types.VARCHAR, registeredClient.getId()), - new SqlParameterValue(Types.VARCHAR, registeredClient.getClientId()), - new SqlParameterValue(Types.TIMESTAMP, Timestamp.from(issuedAt)), - new SqlParameterValue(Types.BLOB, registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)), - new SqlParameterValue(Types.TIMESTAMP, clientSecretExpiresAt), - new SqlParameterValue(Types.VARCHAR, registeredClient.getClientName()), - new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(clientAuthenticationMethodNames)), - new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(authorizationGrantTypeNames)), - new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getRedirectUris())), - new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getScopes())), - new SqlParameterValue(Types.VARCHAR, clientSettingsJson), - new SqlParameterValue(Types.VARCHAR, tokenSettingsJson)); - } - - public final void setObjectMapper(ObjectMapper objectMapper) { - Assert.notNull(objectMapper, "objectMapper cannot be null"); + private DefaultRegisteredClientParametersMapper(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } - protected final ObjectMapper getObjectMapper() { - return this.objectMapper; - } - - private String writeMap(Map data) { + @Override + public List apply(RegisteredClient registeredClient) { try { - return this.objectMapper.writeValueAsString(data); - } catch (Exception ex) { - throw new IllegalArgumentException(ex.getMessage(), ex); + List clientAuthenticationMethodNames = new ArrayList<>(registeredClient.getClientAuthenticationMethods().size()); + for (ClientAuthenticationMethod clientAuthenticationMethod : registeredClient.getClientAuthenticationMethods()) { + clientAuthenticationMethodNames.add(clientAuthenticationMethod.getValue()); + } + + List authorizationGrantTypeNames = new ArrayList<>(registeredClient.getAuthorizationGrantTypes().size()); + for (AuthorizationGrantType authorizationGrantType : registeredClient.getAuthorizationGrantTypes()) { + authorizationGrantTypeNames.add(authorizationGrantType.getValue()); + } + + Instant issuedAt = registeredClient.getClientIdIssuedAt() != null ? + registeredClient.getClientIdIssuedAt() : Instant.now(); + + Timestamp clientSecretExpiresAt = registeredClient.getClientSecretExpiresAt() != null ? + Timestamp.from(registeredClient.getClientSecretExpiresAt()) : null; + + Map clientSettings = new HashMap<>(); + clientSettings.put("require_proof_key", registeredClient.getClientSettings().requireProofKey()); + clientSettings.put("require_user_consent", registeredClient.getClientSettings().requireUserConsent()); + String clientSettingsJson = this.objectMapper.writeValueAsString(clientSettings); + + Map tokenSettings = new HashMap<>(); + tokenSettings.put("access_token_ttl", registeredClient.getTokenSettings().accessTokenTimeToLive().toMillis()); + tokenSettings.put("reuse_refresh_tokens", registeredClient.getTokenSettings().reuseRefreshTokens()); + tokenSettings.put("refresh_token_ttl", registeredClient.getTokenSettings().refreshTokenTimeToLive().toMillis()); + String tokenSettingsJson = this.objectMapper.writeValueAsString(tokenSettings); + + return Arrays.asList( + new SqlParameterValue(Types.VARCHAR, registeredClient.getId()), + new SqlParameterValue(Types.VARCHAR, registeredClient.getClientId()), + new SqlParameterValue(Types.TIMESTAMP, Timestamp.from(issuedAt)), + new SqlParameterValue(Types.BLOB, registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)), + new SqlParameterValue(Types.TIMESTAMP, clientSecretExpiresAt), + new SqlParameterValue(Types.VARCHAR, registeredClient.getClientName()), + new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(clientAuthenticationMethodNames)), + new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(authorizationGrantTypeNames)), + new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getRedirectUris())), + new SqlParameterValue(Types.VARCHAR, StringUtils.collectionToCommaDelimitedString(registeredClient.getScopes())), + new SqlParameterValue(Types.VARCHAR, clientSettingsJson), + new SqlParameterValue(Types.VARCHAR, tokenSettingsJson)); + } catch (JsonProcessingException e) { + throw new IllegalArgumentException(e.getMessage(), e); } } diff --git a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepositoryTests.java b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepositoryTests.java index 6316d119..2b8d8468 100644 --- a/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepositoryTests.java +++ b/oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/client/JdbcRegisteredClientRepositoryTests.java @@ -20,13 +20,13 @@ import java.nio.charset.Charset; import java.time.Duration; import java.time.Instant; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.jdbc.support.lob.DefaultLobHandler; import org.springframework.security.oauth2.core.AuthorizationGrantType; import org.springframework.security.oauth2.core.ClientAuthenticationMethod; import org.springframework.util.StreamUtils; @@ -89,16 +89,25 @@ public class JdbcRegisteredClientRepositoryTests { public void whenJdbcOperationsNullThenThrow() { // @formatter:off assertThatIllegalArgumentException() - .isThrownBy(() -> new JdbcRegisteredClientRepository(null, new DefaultLobHandler())) + .isThrownBy(() -> new JdbcRegisteredClientRepository(null, new ObjectMapper())) .withMessage("jdbcOperations cannot be null"); // @formatter:on } + @Test + public void whenObjectMapperNullThenThrow() { + // @formatter:off + assertThatIllegalArgumentException() + .isThrownBy(() -> new JdbcRegisteredClientRepository(this.jdbc, null)) + .withMessage("objectMapper cannot be null"); + // @formatter:on + } + @Test public void whenLobHandlerNullThenThrow() { // @formatter:off assertThatIllegalArgumentException() - .isThrownBy(() -> new JdbcRegisteredClientRepository(this.jdbc, null)) + .isThrownBy(() -> new JdbcRegisteredClientRepository(this.jdbc, null, new ObjectMapper())) .withMessage("lobHandler cannot be null"); // @formatter:on }