-
Notifications
You must be signed in to change notification settings - Fork 40.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reinstate auto-config of RequestContextFilter with Jersey
Previously, the auto-configuration for both Jersey and WebMvc would auto-configure a RequestContextFilter bean. In 2.1.0, this led to a startup failure due to the latter attempting to override the bean defined by the former. In addition to the override there were also problems with the order of the filter as Jersey uses -1 and MVC uses -105. To avoid the above-described problems, the auto-configuration of the RequestContextFilter was removed from JerseyAutoConfiguration in 2.1.1. Unfortunately, the broke request-scoped beans for those using only Jersey. This commit attempts to strike a better balance by reintroducing the auto-configuration of RequestContextFilter in JerseyAutoConfiguration. It will back off if the user defines their own filter or filter registration. WebMvcAutoConfiguration has been updated to back off in the same manner. This leaves the potential for ordering problems, but they are no worse than they were before. Furthermore, the user has the means to correct any problems by using the various filter ordering properties that are provided for Jersey, Spring Session, Spring Security, etc. Closes gh-15376
- Loading branch information
1 parent
cc64398
commit 799ac24
Showing
4 changed files
with
170 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
106 changes: 106 additions & 0 deletions
106
...test/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfigurationTests.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
/* | ||
* Copyright 2012-2019 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 | ||
* | ||
* http://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.jersey; | ||
|
||
import org.glassfish.jersey.server.ResourceConfig; | ||
import org.junit.Test; | ||
|
||
import org.springframework.boot.autoconfigure.AutoConfigurations; | ||
import org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener; | ||
import org.springframework.boot.logging.LogLevel; | ||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner; | ||
import org.springframework.boot.web.servlet.FilterRegistrationBean; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.web.filter.RequestContextFilter; | ||
|
||
import static org.assertj.core.api.Assertions.assertThat; | ||
|
||
/** | ||
* Tests for {@link JerseyAutoConfiguration}. | ||
* | ||
* @author Andy Wilkinson | ||
*/ | ||
public class JerseyAutoConfigurationTests { | ||
|
||
private final WebApplicationContextRunner contextRunner = new WebApplicationContextRunner() | ||
.withConfiguration(AutoConfigurations.of(JerseyAutoConfiguration.class)) | ||
.withInitializer(new ConditionEvaluationReportLoggingListener(LogLevel.INFO)) | ||
.withUserConfiguration(ResourceConfig.class); | ||
|
||
@Test | ||
public void requestContextFilterRegistrationIsAutoConfigured() { | ||
this.contextRunner.run((context) -> { | ||
assertThat(context).hasSingleBean(FilterRegistrationBean.class); | ||
FilterRegistrationBean<?> registration = context | ||
.getBean(FilterRegistrationBean.class); | ||
assertThat(registration.getFilter()).isInstanceOf(RequestContextFilter.class); | ||
}); | ||
} | ||
|
||
@Test | ||
public void whenUserDefinesARequestContextFilterTheAutoConfiguredRegistrationBacksOff() { | ||
this.contextRunner.withUserConfiguration(RequestContextFilterConfiguration.class) | ||
.run((context) -> { | ||
assertThat(context).doesNotHaveBean(FilterRegistrationBean.class); | ||
assertThat(context).hasSingleBean(RequestContextFilter.class); | ||
}); | ||
} | ||
|
||
@Test | ||
public void whenUserDefinesARequestContextFilterRegistrationTheAutoConfiguredRegistrationBacksOff() { | ||
this.contextRunner | ||
.withUserConfiguration( | ||
RequestContextFilterRegistrationConfiguration.class) | ||
.run((context) -> { | ||
assertThat(context).hasSingleBean(FilterRegistrationBean.class); | ||
assertThat(context).hasBean("customRequestContextFilterRegistration"); | ||
}); | ||
} | ||
|
||
@Configuration | ||
static class ResourceConfigConfiguration { | ||
|
||
@Bean | ||
public ResourceConfig resourceConfig() { | ||
return new ResourceConfig(); | ||
} | ||
|
||
} | ||
|
||
@Configuration | ||
static class RequestContextFilterConfiguration { | ||
|
||
@Bean | ||
public RequestContextFilter requestContextFilter() { | ||
return new RequestContextFilter(); | ||
} | ||
|
||
} | ||
|
||
@Configuration | ||
static class RequestContextFilterRegistrationConfiguration { | ||
|
||
@Bean | ||
public FilterRegistrationBean<RequestContextFilter> customRequestContextFilterRegistration() { | ||
return new FilterRegistrationBean<RequestContextFilter>( | ||
new RequestContextFilter()); | ||
} | ||
|
||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters