Merge branch '1.5.x'
This commit is contained in:
commit
7b39cdd5c4
|
@ -17,6 +17,7 @@
|
||||||
package org.springframework.boot.web.servlet.support;
|
package org.springframework.boot.web.servlet.support;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -24,6 +25,7 @@ import javax.servlet.Filter;
|
||||||
import javax.servlet.FilterChain;
|
import javax.servlet.FilterChain;
|
||||||
import javax.servlet.FilterConfig;
|
import javax.servlet.FilterConfig;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
@ -311,11 +313,15 @@ public class ErrorPageFilter implements Filter, ErrorPageRegistry {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void flushBuffer() throws IOException {
|
public void flushBuffer() throws IOException {
|
||||||
|
sendErrorIfNecessary();
|
||||||
|
super.flushBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendErrorIfNecessary() throws IOException {
|
||||||
if (this.hasErrorToSend && !isCommitted()) {
|
if (this.hasErrorToSend && !isCommitted()) {
|
||||||
((HttpServletResponse) getResponse()).sendError(this.status,
|
((HttpServletResponse) getResponse()).sendError(this.status,
|
||||||
this.message);
|
this.message);
|
||||||
}
|
}
|
||||||
super.flushBuffer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
|
@ -326,6 +332,19 @@ public class ErrorPageFilter implements Filter, ErrorPageRegistry {
|
||||||
return this.hasErrorToSend;
|
return this.hasErrorToSend;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PrintWriter getWriter() throws IOException {
|
||||||
|
sendErrorIfNecessary();
|
||||||
|
return super.getWriter();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServletOutputStream getOutputStream() throws IOException {
|
||||||
|
sendErrorIfNecessary();
|
||||||
|
return super.getOutputStream();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -521,6 +521,22 @@ public class ErrorPageFilterTests {
|
||||||
assertThat(this.response.getForwardedUrl()).isEqualTo("/500");
|
assertThat(this.response.getForwardedUrl()).isEqualTo("/500");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenErrorIsSentAndWriterIsFlushedErrorIsSentToTheClient()
|
||||||
|
throws Exception {
|
||||||
|
this.chain = new MockFilterChain() {
|
||||||
|
@Override
|
||||||
|
public void doFilter(ServletRequest request, ServletResponse response)
|
||||||
|
throws IOException, ServletException {
|
||||||
|
((HttpServletResponse) response).sendError(400);
|
||||||
|
response.getWriter().flush();
|
||||||
|
super.doFilter(request, response);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
this.filter.doFilter(this.request, this.response, this.chain);
|
||||||
|
assertThat(this.response.getStatus()).isEqualTo(400);
|
||||||
|
}
|
||||||
|
|
||||||
private void setUpAsyncDispatch() throws Exception {
|
private void setUpAsyncDispatch() throws Exception {
|
||||||
this.request.setAsyncSupported(true);
|
this.request.setAsyncSupported(true);
|
||||||
this.request.setAsyncStarted(true);
|
this.request.setAsyncStarted(true);
|
||||||
|
|
Loading…
Reference in New Issue