diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java index 77caff9889af..960504eddfdd 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilter.java @@ -114,6 +114,10 @@ private WebInvocationPrivilegeEvaluator getPrivilegeEvaluatorBean() { } } + @Override + public void destroy() { + } + /** * {@link WebInvocationPrivilegeEvaluator} that always allows access. */ diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilterTests.java index 8a9da1cff47a..41cdbd479b8f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/filter/ErrorPageSecurityFilterTests.java @@ -16,7 +16,10 @@ package org.springframework.boot.web.servlet.filter; +import java.lang.reflect.Method; + import javax.servlet.DispatcherType; +import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.RequestDispatcher; @@ -32,6 +35,7 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.access.WebInvocationPrivilegeEvaluator; +import org.springframework.util.ReflectionUtils; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -145,4 +149,18 @@ void whenThereIsAContextPathAndServletIsMappedToWildcardPathCorrectPathIsPassedT verify(this.privilegeEvaluator).isAllowed(eq("/dispatcher/path/error"), any()); } + @Test + void filterIsCompatibleWithServlet31() { + Method[] methods = Filter.class.getDeclaredMethods(); + for (Method method : methods) { + if (method.isDefault()) { + Method securityFilterMethod = ReflectionUtils.findMethod(ErrorPageSecurityFilter.class, + method.getName(), method.getParameterTypes()); + assertThat(securityFilterMethod).isNotNull(); + assertThat(securityFilterMethod.getDeclaringClass()).as(method.getName()) + .isEqualTo(ErrorPageSecurityFilter.class); + } + } + } + }