Add autoconfiguration for JWKTokenStore
If `jwk.key-set-uri` is present. Closes gh-4437
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user