Merge branch '2.4.x'

Closes gh-25073
pull/25075/head
Andy Wilkinson 4 years ago
commit 7f8ea33359

@ -84,6 +84,7 @@ dependencies {
testImplementation("org.testcontainers:mongodb") testImplementation("org.testcontainers:mongodb")
testImplementation("org.testcontainers:neo4j") testImplementation("org.testcontainers:neo4j")
testImplementation("org.testcontainers:testcontainers") testImplementation("org.testcontainers:testcontainers")
testImplementation("org.thymeleaf:thymeleaf")
testRuntimeOnly("org.junit.platform:junit-platform-launcher") testRuntimeOnly("org.junit.platform:junit-platform-launcher")
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,14 +21,13 @@ import java.util.Collections;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.Set; import java.util.Set;
import com.fasterxml.jackson.databind.Module;
import org.springframework.boot.context.TypeExcludeFilter; import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.boot.jackson.JsonComponent; import org.springframework.boot.jackson.JsonComponent;
import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter; import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter;
import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.GenericConverter; import org.springframework.core.convert.converter.GenericConverter;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.ClassUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.reactive.config.WebFluxConfigurer; import org.springframework.web.reactive.config.WebFluxConfigurer;
@ -45,6 +44,9 @@ public final class WebFluxTypeExcludeFilter extends StandardAnnotationCustomizab
private static final Class<?>[] NO_CONTROLLERS = {}; private static final Class<?>[] NO_CONTROLLERS = {};
private static final String[] OPTIONAL_INCLUDES = { "com.fasterxml.jackson.databind.Module",
"org.thymeleaf.dialect.IDialect" };
private static final Set<Class<?>> DEFAULT_INCLUDES; private static final Set<Class<?>> DEFAULT_INCLUDES;
static { static {
@ -56,10 +58,13 @@ public final class WebFluxTypeExcludeFilter extends StandardAnnotationCustomizab
includes.add(GenericConverter.class); includes.add(GenericConverter.class);
includes.add(WebExceptionHandler.class); includes.add(WebExceptionHandler.class);
includes.add(WebFilter.class); includes.add(WebFilter.class);
for (String optionalInclude : OPTIONAL_INCLUDES) {
try { try {
includes.add(Module.class); includes.add(ClassUtils.forName(optionalInclude, null));
}
catch (Exception ex) {
// Ignore
} }
catch (Throwable ex) {
} }
DEFAULT_INCLUDES = Collections.unmodifiableSet(includes); DEFAULT_INCLUDES = Collections.unmodifiableSet(includes);
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,8 +21,6 @@ import java.util.Collections;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.Set; import java.util.Set;
import com.fasterxml.jackson.databind.Module;
import org.springframework.boot.context.TypeExcludeFilter; import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.boot.jackson.JsonComponent; import org.springframework.boot.jackson.JsonComponent;
import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter; import org.springframework.boot.test.autoconfigure.filter.StandardAnnotationCustomizableTypeExcludeFilter;
@ -51,9 +49,9 @@ public final class WebMvcTypeExcludeFilter extends StandardAnnotationCustomizabl
private static final Class<?>[] NO_CONTROLLERS = {}; private static final Class<?>[] NO_CONTROLLERS = {};
private static final String[] OPTIONAL_INCLUDES = { private static final String[] OPTIONAL_INCLUDES = { "com.fasterxml.jackson.databind.Module",
"org.springframework.security.config.annotation.web.WebSecurityConfigurer", "org.springframework.security.config.annotation.web.WebSecurityConfigurer",
"org.springframework.security.web.SecurityFilterChain" }; "org.springframework.security.web.SecurityFilterChain", "org.thymeleaf.dialect.IDialect" };
private static final Set<Class<?>> DEFAULT_INCLUDES; private static final Set<Class<?>> DEFAULT_INCLUDES;
@ -71,11 +69,6 @@ public final class WebMvcTypeExcludeFilter extends StandardAnnotationCustomizabl
includes.add(Converter.class); includes.add(Converter.class);
includes.add(GenericConverter.class); includes.add(GenericConverter.class);
includes.add(HandlerInterceptor.class); includes.add(HandlerInterceptor.class);
try {
includes.add(Module.class);
}
catch (Throwable ex) {
}
for (String optionalInclude : OPTIONAL_INCLUDES) { for (String optionalInclude : OPTIONAL_INCLUDES) {
try { try {
includes.add(ClassUtils.forName(optionalInclude, null)); includes.add(ClassUtils.forName(optionalInclude, null));

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,6 +20,7 @@ import java.io.IOException;
import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.module.SimpleModule;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.thymeleaf.dialect.IDialect;
import reactor.core.publisher.Mono; import reactor.core.publisher.Mono;
import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.ComponentScan.Filter;
@ -59,6 +60,7 @@ class WebFluxTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue(); assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebFilter.class)).isFalse(); assertThat(excludes(filter, ExampleWebFilter.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
@Test @Test
@ -72,6 +74,7 @@ class WebFluxTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue(); assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebFilter.class)).isFalse(); assertThat(excludes(filter, ExampleWebFilter.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
@Test @Test
@ -85,6 +88,7 @@ class WebFluxTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue(); assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebFilter.class)).isTrue(); assertThat(excludes(filter, ExampleWebFilter.class)).isTrue();
assertThat(excludes(filter, ExampleModule.class)).isTrue(); assertThat(excludes(filter, ExampleModule.class)).isTrue();
assertThat(excludes(filter, ExampleDialect.class)).isTrue();
} }
@Test @Test
@ -98,6 +102,7 @@ class WebFluxTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isFalse(); assertThat(excludes(filter, ExampleRepository.class)).isFalse();
assertThat(excludes(filter, ExampleWebFilter.class)).isFalse(); assertThat(excludes(filter, ExampleWebFilter.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
@Test @Test
@ -111,6 +116,7 @@ class WebFluxTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isTrue(); assertThat(excludes(filter, ExampleRepository.class)).isTrue();
assertThat(excludes(filter, ExampleWebFilter.class)).isFalse(); assertThat(excludes(filter, ExampleWebFilter.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
private boolean excludes(WebFluxTypeExcludeFilter filter, Class<?> type) throws IOException { private boolean excludes(WebFluxTypeExcludeFilter filter, Class<?> type) throws IOException {
@ -185,4 +191,13 @@ class WebFluxTypeExcludeFilterTests {
} }
static class ExampleDialect implements IDialect {
@Override
public String getName() {
return "example";
}
}
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2020 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,6 +20,7 @@ import java.io.IOException;
import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.module.SimpleModule;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.thymeleaf.dialect.IDialect;
import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.FilterType; import org.springframework.context.annotation.FilterType;
@ -61,6 +62,7 @@ class WebMvcTypeExcludeFilterTests {
assertThat(excludes(filter, SecurityFilterChain.class)).isFalse(); assertThat(excludes(filter, SecurityFilterChain.class)).isFalse();
assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse(); assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
@Test @Test
@ -77,6 +79,7 @@ class WebMvcTypeExcludeFilterTests {
assertThat(excludes(filter, SecurityFilterChain.class)).isFalse(); assertThat(excludes(filter, SecurityFilterChain.class)).isFalse();
assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse(); assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
@Test @Test
@ -93,6 +96,7 @@ class WebMvcTypeExcludeFilterTests {
assertThat(excludes(filter, SecurityFilterChain.class)).isTrue(); assertThat(excludes(filter, SecurityFilterChain.class)).isTrue();
assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isTrue(); assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isTrue();
assertThat(excludes(filter, ExampleModule.class)).isTrue(); assertThat(excludes(filter, ExampleModule.class)).isTrue();
assertThat(excludes(filter, ExampleDialect.class)).isTrue();
} }
@Test @Test
@ -107,6 +111,7 @@ class WebMvcTypeExcludeFilterTests {
assertThat(excludes(filter, ExampleRepository.class)).isFalse(); assertThat(excludes(filter, ExampleRepository.class)).isFalse();
assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse(); assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
@Test @Test
@ -123,6 +128,7 @@ class WebMvcTypeExcludeFilterTests {
assertThat(excludes(filter, SecurityFilterChain.class)).isFalse(); assertThat(excludes(filter, SecurityFilterChain.class)).isFalse();
assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse(); assertThat(excludes(filter, ExampleHandlerInterceptor.class)).isFalse();
assertThat(excludes(filter, ExampleModule.class)).isFalse(); assertThat(excludes(filter, ExampleModule.class)).isFalse();
assertThat(excludes(filter, ExampleDialect.class)).isFalse();
} }
private boolean excludes(WebMvcTypeExcludeFilter filter, Class<?> type) throws IOException { private boolean excludes(WebMvcTypeExcludeFilter filter, Class<?> type) throws IOException {
@ -200,4 +206,13 @@ class WebMvcTypeExcludeFilterTests {
} }
static class ExampleDialect implements IDialect {
@Override
public String getName() {
return "example";
}
}
} }

Loading…
Cancel
Save