Add autoconfiguration for JWKTokenStore

If `jwk.key-set-uri` is present.

Closes gh-4437
This commit is contained in:
Madhura Bhave
2017-02-15 11:58:53 -08:00
parent 01729cc1d2
commit b4134e239e
7 changed files with 226 additions and 40 deletions

View File

@@ -21,29 +21,34 @@ import org.springframework.boot.diagnostics.FailureAnalysis;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
/**
* An {@link AbstractFailureAnalyzer} that performs analysis of failures caused by a
* {@link BindException}.
*
* @author Andy Wilkinson
* @author Madhura Bhave
*/
class BindFailureAnalyzer extends AbstractFailureAnalyzer<BindException> {
@Override
protected FailureAnalysis analyze(Throwable rootFailure, BindException cause) {
if (CollectionUtils.isEmpty(cause.getFieldErrors())) {
if (CollectionUtils.isEmpty(cause.getAllErrors())) {
return null;
}
StringBuilder description = new StringBuilder(
String.format("Binding to target %s failed:%n", cause.getTarget()));
for (FieldError fieldError : cause.getFieldErrors()) {
description.append(String.format("%n Property: %s",
cause.getObjectName() + "." + fieldError.getField()));
for (ObjectError error : cause.getAllErrors()) {
if (error instanceof FieldError) {
FieldError fieldError = (FieldError) error;
description.append(String.format("%n Property: %s",
cause.getObjectName() + "." + fieldError.getField()));
description.append(
String.format("%n Value: %s", fieldError.getRejectedValue()));
}
description.append(
String.format("%n Value: %s", fieldError.getRejectedValue()));
description.append(
String.format("%n Reason: %s%n", fieldError.getDefaultMessage()));
String.format("%n Reason: %s%n", error.getDefaultMessage()));
}
return new FailureAnalysis(description.toString(),
"Update your application's configuration", cause);

View File

@@ -32,6 +32,8 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.diagnostics.FailureAnalysis;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import org.springframework.validation.annotation.Validated;
import static org.assertj.core.api.Assertions.assertThat;
@@ -40,6 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* Tests for {@link BindFailureAnalyzer}.
*
* @author Andy Wilkinson
* @author Madhura Bhave
*/
public class BindFailureAnalyzerTests {
@@ -54,8 +57,8 @@ public class BindFailureAnalyzerTests {
}
@Test
public void bindExceptionDueToValidationFailure() {
FailureAnalysis analysis = performAnalysis(ValidationFailureConfiguration.class);
public void bindExceptionWithFieldErrorsDueToValidationFailure() {
FailureAnalysis analysis = performAnalysis(FieldValidationFailureConfiguration.class);
assertThat(analysis.getDescription())
.contains(failure("test.foo.foo", "null", "may not be null"));
assertThat(analysis.getDescription())
@@ -64,6 +67,13 @@ public class BindFailureAnalyzerTests {
.contains(failure("test.foo.nested.bar", "null", "may not be null"));
}
@Test
public void bindExceptionWithObjectErrorsDueToValidationFailure() throws Exception {
FailureAnalysis analysis = performAnalysis(ObjectValidationFailureConfiguration.class);
assertThat(analysis.getDescription())
.contains("Reason: This object could not be bound.");
}
private static String failure(String property, String value, String reason) {
return String.format("Property: %s%n Value: %s%n Reason: %s", property,
value, reason);
@@ -85,14 +95,19 @@ public class BindFailureAnalyzerTests {
}
}
@EnableConfigurationProperties(ValidationFailureProperties.class)
static class ValidationFailureConfiguration {
@EnableConfigurationProperties(FieldValidationFailureProperties.class)
static class FieldValidationFailureConfiguration {
}
@EnableConfigurationProperties(ObjectErrorFailureProperties.class)
static class ObjectValidationFailureConfiguration {
}
@ConfigurationProperties("test.foo")
@Validated
static class ValidationFailureProperties {
static class FieldValidationFailureProperties {
@NotNull
private String foo;
@@ -144,4 +159,18 @@ public class BindFailureAnalyzerTests {
}
@ConfigurationProperties("foo.bar")
static class ObjectErrorFailureProperties implements Validator {
@Override
public void validate(Object target, Errors errors) {
errors.reject("my.objectError", "This object could not be bound.");
}
@Override
public boolean supports(Class<?> clazz) {
return true;
}
}
}