| 
					
				 | 
			
			
				@@ -1,5 +1,5 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- * Copyright 2002-2012 the original author or authors. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Copyright 2002-2018 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. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -19,8 +19,12 @@ import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.FilterChain; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.servlet.RequestDispatcher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.ServletException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.servlet.ServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.servlet.ServletResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.http.HttpServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.servlet.http.HttpServletRequestWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import javax.servlet.http.HttpServletResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.web.util.OnCommittedResponseWrapper; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -33,6 +37,7 @@ import org.springframework.web.filter.OncePerRequestFilter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * and X-Content-Type-Options. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author Marten Deinum 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * @author Josh Cummings 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @since 3.2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,8 +67,11 @@ public class HeaderWriterFilter extends OncePerRequestFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		HeaderWriterResponse headerWriterResponse = new HeaderWriterResponse(request, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				response, this.headerWriters); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		HeaderWriterRequest headerWriterRequest = new HeaderWriterRequest(request, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				headerWriterResponse); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			filterChain.doFilter(request, headerWriterResponse); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			filterChain.doFilter(headerWriterRequest, headerWriterResponse); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		finally { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			headerWriterResponse.writeHeaders(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,4 +114,39 @@ public class HeaderWriterFilter extends OncePerRequestFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return (HttpServletResponse) getResponse(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static class HeaderWriterRequest extends HttpServletRequestWrapper { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		private final HeaderWriterResponse response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		HeaderWriterRequest(HttpServletRequest request, HeaderWriterResponse response) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			super(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.response = response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		public RequestDispatcher getRequestDispatcher(String path) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return new HeaderWriterRequestDispatcher(super.getRequestDispatcher(path), this.response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static class HeaderWriterRequestDispatcher implements RequestDispatcher { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		private final RequestDispatcher delegate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		private final HeaderWriterResponse response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		HeaderWriterRequestDispatcher(RequestDispatcher delegate, HeaderWriterResponse response) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.delegate = delegate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.response = response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.delegate.forward(request, response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.response.onResponseCommitted(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.delegate.include(request, response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |