Explorar el Código

Settings.setting() supports generic return type

Issue gh-117
Joe Grandja hace 4 años
padre
commit
ca94d02abc

+ 8 - 4
oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/config/Settings.java

@@ -68,13 +68,15 @@ public class Settings implements Serializable {
 	 *
 	 * @param name the name of the setting
 	 * @param value the value of the setting
+	 * @param <T> the type of the {@link Settings}
 	 * @return the {@link Settings}
 	 */
-	public Settings setting(String name, Object value) {
+	@SuppressWarnings("unchecked")
+	public <T extends Settings> T setting(String name, Object value) {
 		Assert.hasText(name, "name cannot be empty");
 		Assert.notNull(value, "value cannot be null");
 		this.settings.put(name, value);
-		return this;
+		return (T) this;
 	}
 
 	/**
@@ -91,10 +93,12 @@ public class Settings implements Serializable {
 	 * allowing the ability to add, replace, or remove.
 	 *
 	 * @param settingsConsumer a {@link Consumer} of the configuration settings {@code Map}
+	 * @param <T> the type of the {@link Settings}
 	 * @return the {@link Settings}
 	 */
-	public Settings settings(Consumer<Map<String, Object>> settingsConsumer) {
+	@SuppressWarnings("unchecked")
+	public <T extends Settings> T settings(Consumer<Map<String, Object>> settingsConsumer) {
 		settingsConsumer.accept(this.settings);
-		return this;
+		return (T) this;
 	}
 }

+ 14 - 0
oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/ClientSettingsTests.java

@@ -53,4 +53,18 @@ public class ClientSettingsTests {
 		ClientSettings clientSettings = new ClientSettings().requireUserConsent(true);
 		assertThat(clientSettings.requireUserConsent()).isTrue();
 	}
+
+	@Test
+	public void settingWhenCalledThenReturnClientSettings() {
+		ClientSettings clientSettings = new ClientSettings()
+				.<ClientSettings>setting("name1", "value1")
+				.requireProofKey(true)
+				.<ClientSettings>settings(settings -> settings.put("name2", "value2"))
+				.requireUserConsent(true);
+		assertThat(clientSettings.settings()).hasSize(4);
+		assertThat(clientSettings.requireProofKey()).isTrue();
+		assertThat(clientSettings.requireUserConsent()).isTrue();
+		assertThat(clientSettings.<String>setting("name1")).isEqualTo("value1");
+		assertThat(clientSettings.<String>setting("name2")).isEqualTo("value2");
+	}
 }

+ 13 - 0
oauth2-authorization-server/src/test/java/org/springframework/security/oauth2/server/authorization/config/TokenSettingsTests.java

@@ -49,4 +49,17 @@ public class TokenSettingsTests {
 		TokenSettings tokenSettings = new TokenSettings().accessTokenTimeToLive(accessTokenTimeToLive);
 		assertThat(tokenSettings.accessTokenTimeToLive()).isEqualTo(accessTokenTimeToLive);
 	}
+
+	@Test
+	public void settingWhenCalledThenReturnTokenSettings() {
+		Duration accessTokenTimeToLive = Duration.ofMinutes(10);
+		TokenSettings tokenSettings = new TokenSettings()
+				.<TokenSettings>setting("name1", "value1")
+				.accessTokenTimeToLive(accessTokenTimeToLive)
+				.<TokenSettings>settings(settings -> settings.put("name2", "value2"));
+		assertThat(tokenSettings.settings()).hasSize(3);
+		assertThat(tokenSettings.accessTokenTimeToLive()).isEqualTo(accessTokenTimeToLive);
+		assertThat(tokenSettings.<String>setting("name1")).isEqualTo("value1");
+		assertThat(tokenSettings.<String>setting("name2")).isEqualTo("value2");
+	}
 }