12 changed files with 92 additions and 203 deletions
@ -1,48 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2012-present the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the License); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0 |
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
|
|
||||||
|
|
||||||
plugins { |
|
||||||
id "java-library" |
|
||||||
id "org.springframework.boot.deployed" |
|
||||||
id "org.springframework.boot.optional-dependencies" |
|
||||||
} |
|
||||||
|
|
||||||
description = "Spring Boot AutoConfigure All" |
|
||||||
|
|
||||||
dependencies { |
|
||||||
api(project(":spring-boot-project:spring-boot")) |
|
||||||
api(project(":spring-boot-project:spring-boot-autoconfigure")) |
|
||||||
|
|
||||||
optional(project(":spring-boot-project:spring-boot-web-server")) |
|
||||||
optional("jakarta.servlet:jakarta.servlet-api") |
|
||||||
optional("org.springframework:spring-webmvc") |
|
||||||
|
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-data-redis")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-http-converter")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-jetty")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-security")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-servlet")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-session-data-redis")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-test")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-tomcat")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-undertow")) |
|
||||||
testImplementation(project(":spring-boot-project:spring-boot-webmvc")) |
|
||||||
testImplementation(testFixtures(project(":spring-boot-project:spring-boot-web-server"))) |
|
||||||
|
|
||||||
testRuntimeOnly("org.apache.httpcomponents.client5:httpclient5") |
|
||||||
} |
|
||||||
@ -1,138 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2012-present the original author or authors. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
|
|
||||||
package org.springframework.boot.autoconfigure.web.servlet; |
|
||||||
|
|
||||||
import java.util.List; |
|
||||||
import java.util.concurrent.ConcurrentHashMap; |
|
||||||
|
|
||||||
import jakarta.servlet.Filter; |
|
||||||
import org.junit.jupiter.api.AfterEach; |
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; |
|
||||||
import org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration; |
|
||||||
import org.springframework.boot.security.autoconfigure.servlet.SecurityAutoConfiguration; |
|
||||||
import org.springframework.boot.servlet.autoconfigure.HttpEncodingAutoConfiguration; |
|
||||||
import org.springframework.boot.servlet.filter.OrderedCharacterEncodingFilter; |
|
||||||
import org.springframework.boot.servlet.filter.OrderedRequestContextFilter; |
|
||||||
import org.springframework.boot.session.autoconfigure.SessionAutoConfiguration; |
|
||||||
import org.springframework.boot.test.util.TestPropertyValues; |
|
||||||
import org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor; |
|
||||||
import org.springframework.boot.web.server.servlet.MockServletWebServer.RegisteredFilter; |
|
||||||
import org.springframework.boot.web.server.servlet.MockServletWebServerFactory; |
|
||||||
import org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext; |
|
||||||
import org.springframework.boot.webmvc.autoconfigure.WebMvcAutoConfiguration; |
|
||||||
import org.springframework.context.annotation.Bean; |
|
||||||
import org.springframework.context.annotation.Configuration; |
|
||||||
import org.springframework.data.redis.connection.RedisConnection; |
|
||||||
import org.springframework.data.redis.connection.RedisConnectionFactory; |
|
||||||
import org.springframework.security.web.FilterChainProxy; |
|
||||||
import org.springframework.session.MapSessionRepository; |
|
||||||
import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession; |
|
||||||
import org.springframework.web.filter.DelegatingFilterProxy; |
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat; |
|
||||||
import static org.mockito.BDDMockito.given; |
|
||||||
import static org.mockito.Mockito.mock; |
|
||||||
|
|
||||||
/** |
|
||||||
* Integration tests that verify the ordering of various filters that are auto-configured. |
|
||||||
* |
|
||||||
* @author Andy Wilkinson |
|
||||||
* @author Eddú Meléndez |
|
||||||
*/ |
|
||||||
class FilterOrderingIntegrationTests { |
|
||||||
|
|
||||||
private AnnotationConfigServletWebServerApplicationContext context; |
|
||||||
|
|
||||||
@AfterEach |
|
||||||
void cleanup() { |
|
||||||
if (this.context != null) { |
|
||||||
this.context.close(); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
void testFilterOrdering() { |
|
||||||
load(); |
|
||||||
List<RegisteredFilter> registeredFilters = this.context.getBean(MockServletWebServerFactory.class) |
|
||||||
.getWebServer() |
|
||||||
.getRegisteredFilters(); |
|
||||||
assertThat(registeredFilters.get(0).getFilter()).isInstanceOf(OrderedCharacterEncodingFilter.class); |
|
||||||
assertThat(registeredFilters.get(1).getFilter()).isInstanceOf(DelegatingFilterProxy.class) |
|
||||||
.extracting("targetBeanName") |
|
||||||
.isEqualTo("springSessionRepositoryFilter"); |
|
||||||
assertThat(registeredFilters.get(2).getFilter()).isInstanceOf(Filter.class) |
|
||||||
.extracting("beanName") |
|
||||||
.isEqualTo("hiddenHttpMethodFilter"); |
|
||||||
assertThat(registeredFilters.get(3).getFilter()).isInstanceOf(Filter.class) |
|
||||||
.extracting("beanName") |
|
||||||
.isEqualTo("formContentFilter"); |
|
||||||
assertThat(registeredFilters.get(4).getFilter()).isInstanceOf(OrderedRequestContextFilter.class); |
|
||||||
assertThat(registeredFilters.get(5).getFilter()).isInstanceOf(FilterChainProxy.class); |
|
||||||
} |
|
||||||
|
|
||||||
private void load() { |
|
||||||
this.context = new AnnotationConfigServletWebServerApplicationContext(); |
|
||||||
this.context.register(MockWebServerConfiguration.class, TestSessionConfiguration.class, |
|
||||||
TestRedisConfiguration.class, WebMvcAutoConfiguration.class, SecurityAutoConfiguration.class, |
|
||||||
SessionAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class, |
|
||||||
PropertyPlaceholderAutoConfiguration.class, HttpEncodingAutoConfiguration.class); |
|
||||||
TestPropertyValues.of("spring.mvc.hiddenmethod.filter.enabled:true").applyTo(this.context); |
|
||||||
this.context.refresh(); |
|
||||||
} |
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false) |
|
||||||
static class MockWebServerConfiguration { |
|
||||||
|
|
||||||
@Bean |
|
||||||
MockServletWebServerFactory webServerFactory() { |
|
||||||
return new MockServletWebServerFactory(); |
|
||||||
} |
|
||||||
|
|
||||||
@Bean |
|
||||||
static WebServerFactoryCustomizerBeanPostProcessor servletWebServerCustomizerBeanPostProcessor() { |
|
||||||
return new WebServerFactoryCustomizerBeanPostProcessor(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false) |
|
||||||
@EnableSpringHttpSession |
|
||||||
static class TestSessionConfiguration { |
|
||||||
|
|
||||||
@Bean |
|
||||||
MapSessionRepository mapSessionRepository() { |
|
||||||
return new MapSessionRepository(new ConcurrentHashMap<>()); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false) |
|
||||||
static class TestRedisConfiguration { |
|
||||||
|
|
||||||
@Bean |
|
||||||
RedisConnectionFactory redisConnectionFactory() { |
|
||||||
RedisConnectionFactory connectionFactory = mock(RedisConnectionFactory.class); |
|
||||||
RedisConnection connection = mock(RedisConnection.class); |
|
||||||
given(connectionFactory.getConnection()).willReturn(connection); |
|
||||||
return connectionFactory; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -1,4 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<configuration> |
|
||||||
<include resource="org/springframework/boot/logging/logback/base.xml"/> |
|
||||||
</configuration> |
|
||||||
@ -0,0 +1,54 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-present the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.servlet.filter; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.assertj.core.api.Assertions; |
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import org.springframework.core.annotation.AnnotationAwareOrderComparator; |
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||||
|
|
||||||
|
/** |
||||||
|
* Tests for the ordering of various {@link OrderedFilter} implementations. |
||||||
|
* |
||||||
|
* @author Andy Wilkinson |
||||||
|
*/ |
||||||
|
class OrderedFilterOrderingTests { |
||||||
|
|
||||||
|
@Test |
||||||
|
void ordering() { |
||||||
|
OrderedCharacterEncodingFilter characterEncoding = new OrderedCharacterEncodingFilter(); |
||||||
|
OrderedFormContentFilter formContent = new OrderedFormContentFilter(); |
||||||
|
OrderedHiddenHttpMethodFilter hiddenHttpMethod = new OrderedHiddenHttpMethodFilter(); |
||||||
|
OrderedRequestContextFilter requestContext = new OrderedRequestContextFilter(); |
||||||
|
List<OrderedFilter> filters = new ArrayList<>( |
||||||
|
List.of(characterEncoding, formContent, hiddenHttpMethod, requestContext)); |
||||||
|
AnnotationAwareOrderComparator.sort(filters); |
||||||
|
assertThat(filters).containsExactly(characterEncoding, hiddenHttpMethod, formContent, requestContext); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
void requestContextOrderingIsCloseToRequestWrapperFilterMaxOrder() { |
||||||
|
assertThat(new OrderedRequestContextFilter().getOrder()) |
||||||
|
.isCloseTo(OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER, Assertions.within(105)); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue