diff --git a/spring-session/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java b/spring-session/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java index a4dc830..304f7f6 100644 --- a/spring-session/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java +++ b/spring-session/src/main/java/org/springframework/session/web/http/OnCommittedResponseWrapper.java @@ -187,7 +187,10 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper { */ private void checkContentLength(long contentLengthToWrite) { contentWritten += contentLengthToWrite; - if(contentLength > 0 && contentWritten >= contentLength) { + boolean isBodyFullyWritten = contentLength > 0 && contentWritten >= contentLength; + int bufferSize = getBufferSize(); + boolean requiresFlush = bufferSize > 0 && contentWritten >= bufferSize; + if(isBodyFullyWritten || requiresFlush) { doOnResponseCommitted(); } } diff --git a/spring-session/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java b/spring-session/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java index 9d9fbae..88edc3d 100644 --- a/spring-session/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java +++ b/spring-session/src/test/java/org/springframework/session/web/http/OnCommittedResponseWrapperTests.java @@ -1059,4 +1059,14 @@ public class OnCommittedResponseWrapperTests { assertThat(committed).isTrue(); } + + @Test + public void bufferSizePrintWriterWriteCommits() throws Exception { + String expected = "1234567890"; + when(response.getBufferSize()).thenReturn(expected.length()); + + response.getWriter().write(expected); + + assertThat(committed).isTrue(); + } } \ No newline at end of file