From 0d47abbac4c4381a727be1c0f59fe73113fb5ebd Mon Sep 17 00:00:00 2001 From: Venil Noronha Date: Mon, 25 Apr 2016 07:59:26 +0530 Subject: [PATCH] Extract ApplicationContextHeaderFilter Extract ApplicationContextHeaderFilter to a top-level class from EndpointWebMvcAutoConfiguration and make the header field public. Fixes gh-5726 Closes gh-5784 --- .../EndpointWebMvcAutoConfiguration.java | 31 +--------- .../web/ApplicationContextHeaderFilter.java | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+), 29 deletions(-) create mode 100644 spring-boot/src/main/java/org/springframework/boot/context/web/ApplicationContextHeaderFilter.java diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java index 951d8d1989..e240b99105 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcAutoConfiguration.java @@ -16,13 +16,7 @@ package org.springframework.boot.actuate.autoconfigure; -import java.io.IOException; - -import javax.servlet.FilterChain; import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -60,6 +54,7 @@ import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext; import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.EmbeddedWebApplicationContext; +import org.springframework.boot.context.web.ApplicationContextHeaderFilter; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationListener; @@ -77,7 +72,6 @@ import org.springframework.core.env.PropertySource; import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.core.type.MethodMetadata; import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.servlet.DispatcherServlet; /** @@ -93,6 +87,7 @@ import org.springframework.web.servlet.DispatcherServlet; * @author Andy Wilkinson * @author Johannes Edmeier * @author EddĂș MelĂ©ndez + * @author Venil Noronha */ @Configuration @ConditionalOnClass({ Servlet.class, DispatcherServlet.class }) @@ -239,28 +234,6 @@ public class EndpointWebMvcAutoConfiguration protected static class EndpointWebMvcConfiguration { } - /** - * {@link OncePerRequestFilter} to add the {@literal X-Application-Context} if - * required. - */ - private static class ApplicationContextHeaderFilter extends OncePerRequestFilter { - - private final ApplicationContext applicationContext; - - ApplicationContextHeaderFilter(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } - - @Override - protected void doFilterInternal(HttpServletRequest request, - HttpServletResponse response, FilterChain filterChain) - throws ServletException, IOException { - response.addHeader("X-Application-Context", this.applicationContext.getId()); - filterChain.doFilter(request, response); - } - - } - /** * {@link ApplicationListener} to propagate the {@link ContextClosedEvent} from a * parent to a child. diff --git a/spring-boot/src/main/java/org/springframework/boot/context/web/ApplicationContextHeaderFilter.java b/spring-boot/src/main/java/org/springframework/boot/context/web/ApplicationContextHeaderFilter.java new file mode 100644 index 0000000000..e8ed412643 --- /dev/null +++ b/spring-boot/src/main/java/org/springframework/boot/context/web/ApplicationContextHeaderFilter.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2016 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.context.web; + +import java.io.IOException; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.context.ApplicationContext; +import org.springframework.web.filter.OncePerRequestFilter; + +/** + * {@link OncePerRequestFilter} to add a {@literal X-Application-Context} header that + * contains the {@link ApplicationContext#getId() ApplicationContext ID}. + * + * @author Phillip Webb + * @author Venil Noronha + * @since 1.4.0 + */ +public class ApplicationContextHeaderFilter extends OncePerRequestFilter { + + /** + * Public constant for {@literal X-Application-Context}. + */ + public static final String HEADER_NAME = "X-Application-Context"; + + private final ApplicationContext applicationContext; + + public ApplicationContextHeaderFilter(ApplicationContext context) { + this.applicationContext = context; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + response.addHeader(HEADER_NAME, this.applicationContext.getId()); + filterChain.doFilter(request, response); + } + +}