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 d1234319..ef6a5af1 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 final class JdbcOAuth2AuthorizationConsentService implements OAuth2AuthorizationConsentService { +public class JdbcOAuth2AuthorizationConsentService implements OAuth2AuthorizationConsentService { // @formatter:off private static final String COLUMN_NAMES = "registered_client_id, " @@ -169,7 +169,7 @@ public final class JdbcOAuth2AuthorizationConsentService implements OAuth2Author * @param authorizationConsentRowMapper the {@link RowMapper} used for mapping the current * row in {@code ResultSet} to {@link OAuth2AuthorizationConsent} */ - public void setAuthorizationConsentRowMapper(RowMapper authorizationConsentRowMapper) { + public final void setAuthorizationConsentRowMapper(RowMapper authorizationConsentRowMapper) { Assert.notNull(authorizationConsentRowMapper, "authorizationConsentRowMapper cannot be null"); this.authorizationConsentRowMapper = authorizationConsentRowMapper; } @@ -182,12 +182,24 @@ public final class JdbcOAuth2AuthorizationConsentService implements OAuth2Author * @param authorizationConsentParametersMapper the {@code Function} used for mapping * {@link OAuth2AuthorizationConsent} to a {@code List} of {@link SqlParameterValue} */ - public void setAuthorizationConsentParametersMapper( + public final 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}. @@ -223,6 +235,11 @@ public final class JdbcOAuth2AuthorizationConsentService implements OAuth2Author } return builder.build(); } + + protected final RegisteredClientRepository getRegisteredClientRepository() { + return this.registeredClientRepository; + } + } /** @@ -244,6 +261,7 @@ public final class JdbcOAuth2AuthorizationConsentService implements OAuth2Author 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 3608fc27..58e47adc 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,6 +29,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.databind.ObjectMapper; import org.springframework.dao.DataRetrievalFailureException; @@ -428,10 +429,9 @@ public class JdbcOAuth2AuthorizationService implements OAuth2AuthorizationServic return this.objectMapper; } - @SuppressWarnings("unchecked") private Map parseMap(String data) { try { - return this.objectMapper.readValue(data, Map.class); + return this.objectMapper.readValue(data, new TypeReference>() {}); } catch (Exception ex) { throw new IllegalArgumentException(ex.getMessage(), ex); } @@ -527,7 +527,6 @@ 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 8ce4df77..84e2f842 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.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.jdbc.core.ArgumentPreparedStatementSetter; @@ -95,17 +95,7 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor * @param jdbcOperations the JDBC operations */ public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations) { - 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); + this(jdbcOperations, new DefaultLobHandler()); } /** @@ -113,18 +103,16 @@ 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, ObjectMapper objectMapper) { + public JdbcRegisteredClientRepository(JdbcOperations jdbcOperations, LobHandler lobHandler) { 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(objectMapper); + DefaultRegisteredClientRowMapper registeredClientRowMapper = new DefaultRegisteredClientRowMapper(); registeredClientRowMapper.setLobHandler(lobHandler); this.registeredClientRowMapper = registeredClientRowMapper; - this.registeredClientParametersMapper = new DefaultRegisteredClientParametersMapper(objectMapper); + this.registeredClientParametersMapper = new DefaultRegisteredClientParametersMapper(); } /** @@ -132,7 +120,7 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor * * @param registeredClientRowMapper mapper implementation */ - public void setRegisteredClientRowMapper(RowMapper registeredClientRowMapper) { + public final void setRegisteredClientRowMapper(RowMapper registeredClientRowMapper) { Assert.notNull(registeredClientRowMapper, "registeredClientRowMapper cannot be null"); this.registeredClientRowMapper = registeredClientRowMapper; } @@ -142,15 +130,31 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor * * @param registeredClientParametersMapper mapper implementation */ - public void setRegisteredClientParametersMapper(Function> registeredClientParametersMapper) { + public final 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 = this.findBy("id = ? OR client_id = ? OR client_secret = ?", + RegisteredClient foundClient = findBy("id = ? OR client_id = ? OR client_secret = ?", registeredClient.getId(), registeredClient.getClientId(), registeredClient.getClientSecret().getBytes(StandardCharsets.UTF_8)); @@ -192,88 +196,72 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor public static class DefaultRegisteredClientRowMapper implements RowMapper { - private final ObjectMapper objectMapper; - + private ObjectMapper objectMapper = new 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 scopes = parseList(rs.getString("scopes")); - Set authGrantTypes = parseList(rs.getString("authorization_grant_types")); - Set clientAuthMethods = parseList(rs.getString("client_authentication_methods")); + Set clientScopes = parseList(rs.getString("scopes")); + Set authorizationGrantTypes = parseList(rs.getString("authorization_grant_types")); + Set clientAuthenticationMethods = parseList(rs.getString("client_authentication_methods")); Set redirectUris = parseList(rs.getString("redirect_uris")); - Timestamp clientIssuedAt = rs.getTimestamp("client_id_issued_at"); + Timestamp clientIdIssuedAt = rs.getTimestamp("client_id_issued_at"); Timestamp clientSecretExpiresAt = rs.getTimestamp("client_secret_expires_at"); - byte[] clientSecretBytes = this.lobHandler.getBlobAsBytes(rs, "client_secret"); - String clientSecret = clientSecretBytes != null ? new String(clientSecretBytes, StandardCharsets.UTF_8) : null; + byte[] clientSecretValue = this.lobHandler.getBlobAsBytes(rs, "client_secret"); RegisteredClient.Builder builder = RegisteredClient .withId(rs.getString("id")) .clientId(rs.getString("client_id")) - .clientIdIssuedAt(clientIssuedAt != null ? clientIssuedAt.toInstant() : null) - .clientSecret(clientSecret) + .clientIdIssuedAt(clientIdIssuedAt != null ? clientIdIssuedAt.toInstant() : null) + .clientSecret(clientSecretValue != null ? new String(clientSecretValue, StandardCharsets.UTF_8) : null) .clientSecretExpiresAt(clientSecretExpiresAt != null ? clientSecretExpiresAt.toInstant() : null) .clientName(rs.getString("client_name")) - .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 rc = builder.build(); - - TokenSettings ts = rc.getTokenSettings(); - ClientSettings cs = rc.getClientSettings(); - - 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())); - } + .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)); + + RegisteredClient registeredClient = builder.build(); + + String tokenSettingsValue = rs.getString("token_settings"); + if (tokenSettingsValue != null) { + Map tokenSettingsValues = parseMap(tokenSettingsValue); + TokenSettings tokenSettings = registeredClient.getTokenSettings(); + + Number accessTokenTTL = (Number) tokenSettingsValues.get("access_token_ttl"); + if (accessTokenTTL != null) { + tokenSettings.accessTokenTimeToLive(Duration.ofMillis(accessTokenTTL.longValue())); + } - Number refreshTokenTTL = (Number) m.get("refresh_token_ttl"); - if (refreshTokenTTL != null) { - ts.refreshTokenTimeToLive(Duration.ofMillis(refreshTokenTTL.longValue())); - } + Number refreshTokenTTL = (Number) tokenSettingsValues.get("refresh_token_ttl"); + if (refreshTokenTTL != null) { + tokenSettings.refreshTokenTimeToLive(Duration.ofMillis(refreshTokenTTL.longValue())); + } - Boolean reuseRefreshTokens = (Boolean) m.get("reuse_refresh_tokens"); - if (reuseRefreshTokens != null) { - ts.reuseRefreshTokens(reuseRefreshTokens); - } + Boolean reuseRefreshTokens = (Boolean) tokenSettingsValues.get("reuse_refresh_tokens"); + if (reuseRefreshTokens != null) { + tokenSettings.reuseRefreshTokens(reuseRefreshTokens); } + } - String clientSettingsJson = rs.getString("client_settings"); - if (clientSettingsJson != null) { - Map m = this.objectMapper.readValue(clientSettingsJson, Map.class); + String clientSettingsValue = rs.getString("client_settings"); + if (clientSettingsValue != null) { + Map clientSettingsValues = parseMap(clientSettingsValue); + ClientSettings clientSettings = registeredClient.getClientSettings(); - Boolean requireProofKey = (Boolean) m.get("require_proof_key"); - if (requireProofKey != null) { - cs.requireProofKey(requireProofKey); - } + Boolean requireProofKey = (Boolean) clientSettingsValues.get("require_proof_key"); + if (requireProofKey != null) { + clientSettings.requireProofKey(requireProofKey); + } - Boolean requireUserConsent = (Boolean) m.get("require_user_consent"); - if (requireUserConsent != null) { - cs.requireUserConsent(requireUserConsent); - } + Boolean requireUserConsent = (Boolean) clientSettingsValues.get("require_user_consent"); + if (requireUserConsent != null) { + clientSettings.requireUserConsent(requireUserConsent); } - } catch (JsonProcessingException e) { - throw new IllegalArgumentException(e.getMessage(), e); } - return rc; + return registeredClient; } public final void setLobHandler(LobHandler lobHandler) { @@ -281,61 +269,95 @@ public class JdbcRegisteredClientRepository implements RegisteredClientRepositor this.lobHandler = lobHandler; } - } + public final void setObjectMapper(ObjectMapper objectMapper) { + Assert.notNull(objectMapper, "objectMapper cannot be null"); + this.objectMapper = objectMapper; + } - public static class DefaultRegisteredClientParametersMapper implements Function> { + protected final LobHandler getLobHandler() { + return this.lobHandler; + } - private final ObjectMapper objectMapper; + protected final ObjectMapper getObjectMapper() { + return this.objectMapper; + } - private DefaultRegisteredClientParametersMapper(ObjectMapper objectMapper) { - this.objectMapper = 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(); + @Override public List apply(RegisteredClient registeredClient) { - try { - List clientAuthenticationMethodNames = new ArrayList<>(registeredClient.getClientAuthenticationMethods().size()); - for (ClientAuthenticationMethod clientAuthenticationMethod : registeredClient.getClientAuthenticationMethods()) { - clientAuthenticationMethodNames.add(clientAuthenticationMethod.getValue()); - } + 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()); - } + 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); + 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"); + this.objectMapper = objectMapper; + } + + protected final ObjectMapper getObjectMapper() { + return this.objectMapper; + } + + private String writeMap(Map data) { + try { + return this.objectMapper.writeValueAsString(data); + } catch (Exception ex) { + throw new IllegalArgumentException(ex.getMessage(), ex); } } 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 2b8d8468..6316d119 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,25 +89,16 @@ public class JdbcRegisteredClientRepositoryTests { public void whenJdbcOperationsNullThenThrow() { // @formatter:off assertThatIllegalArgumentException() - .isThrownBy(() -> new JdbcRegisteredClientRepository(null, new ObjectMapper())) + .isThrownBy(() -> new JdbcRegisteredClientRepository(null, new DefaultLobHandler())) .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, new ObjectMapper())) + .isThrownBy(() -> new JdbcRegisteredClientRepository(this.jdbc, null)) .withMessage("lobHandler cannot be null"); // @formatter:on }