|
@@ -57,6 +57,8 @@ public class SpringTestContext implements Closeable {
|
|
|
|
|
|
private List<Filter> filters = new ArrayList<>();
|
|
private List<Filter> filters = new ArrayList<>();
|
|
|
|
|
|
|
|
+ private DeferAddFilter deferAddFilter = new DeferAddFilter();
|
|
|
|
+
|
|
private List<Consumer<ConfigurableWebApplicationContext>> postProcessors = new ArrayList<>();
|
|
private List<Consumer<ConfigurableWebApplicationContext>> postProcessors = new ArrayList<>();
|
|
|
|
|
|
public SpringTestContext(Object test) {
|
|
public SpringTestContext(Object test) {
|
|
@@ -113,16 +115,17 @@ public class SpringTestContext implements Closeable {
|
|
}
|
|
}
|
|
|
|
|
|
public SpringTestContext mockMvcAfterSpringSecurityOk() {
|
|
public SpringTestContext mockMvcAfterSpringSecurityOk() {
|
|
- return addFilter(new OncePerRequestFilter() {
|
|
|
|
|
|
+ this.deferAddFilter.addFilter(new OncePerRequestFilter() {
|
|
@Override
|
|
@Override
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
|
|
FilterChain filterChain) {
|
|
FilterChain filterChain) {
|
|
response.setStatus(HttpServletResponse.SC_OK);
|
|
response.setStatus(HttpServletResponse.SC_OK);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+ return this;
|
|
}
|
|
}
|
|
|
|
|
|
- private SpringTestContext addFilter(Filter filter) {
|
|
|
|
|
|
+ public SpringTestContext addFilter(Filter filter) {
|
|
this.filters.add(filter);
|
|
this.filters.add(filter);
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
@@ -145,9 +148,10 @@ public class SpringTestContext implements Closeable {
|
|
this.context.refresh();
|
|
this.context.refresh();
|
|
if (this.context.containsBean(BeanIds.SPRING_SECURITY_FILTER_CHAIN)) {
|
|
if (this.context.containsBean(BeanIds.SPRING_SECURITY_FILTER_CHAIN)) {
|
|
// @formatter:off
|
|
// @formatter:off
|
|
- MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.context).
|
|
|
|
- apply(springSecurity())
|
|
|
|
- .apply(new AddFilter())
|
|
|
|
|
|
+ MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
|
|
|
|
+ .addFilters(this.filters.toArray(new Filter[0]))
|
|
|
|
+ .apply(springSecurity())
|
|
|
|
+ .apply(this.deferAddFilter)
|
|
.build();
|
|
.build();
|
|
// @formatter:on
|
|
// @formatter:on
|
|
this.context.getBeanFactory().registerResolvableDependency(MockMvc.class, mockMvc);
|
|
this.context.getBeanFactory().registerResolvableDependency(MockMvc.class, mockMvc);
|
|
@@ -157,12 +161,18 @@ public class SpringTestContext implements Closeable {
|
|
bpp.processInjection(this.test);
|
|
bpp.processInjection(this.test);
|
|
}
|
|
}
|
|
|
|
|
|
- private class AddFilter implements MockMvcConfigurer {
|
|
|
|
|
|
+ private static class DeferAddFilter implements MockMvcConfigurer {
|
|
|
|
+
|
|
|
|
+ private List<Filter> filters = new ArrayList<>();
|
|
|
|
+
|
|
|
|
+ void addFilter(Filter filter) {
|
|
|
|
+ this.filters.add(filter);
|
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public RequestPostProcessor beforeMockMvcCreated(ConfigurableMockMvcBuilder<?> builder,
|
|
public RequestPostProcessor beforeMockMvcCreated(ConfigurableMockMvcBuilder<?> builder,
|
|
WebApplicationContext context) {
|
|
WebApplicationContext context) {
|
|
- builder.addFilters(SpringTestContext.this.filters.toArray(new Filter[0]));
|
|
|
|
|
|
+ builder.addFilters(this.filters.toArray(new Filter[0]));
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|