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 304f7f6..60fe3a7 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 @@ -202,6 +202,7 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper { private void doOnResponseCommitted() { if(!disableOnCommitted) { onResponseCommitted(); + disableOnResponseCommitted(); } else if(logger.isDebugEnabled()){ logger.debug("Skip invoking on"); } 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 88edc3d..d857b79 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 @@ -28,7 +28,7 @@ public class OnCommittedResponseWrapperTests { @Mock ServletOutputStream out; - HttpServletResponse response; + OnCommittedResponseWrapper response; boolean committed; @@ -1069,4 +1069,20 @@ public class OnCommittedResponseWrapperTests { assertThat(committed).isTrue(); } + + @Test + public void bufferSizeCommitsOnce() throws Exception { + String expected = "1234567890"; + when(response.getBufferSize()).thenReturn(expected.length()); + + response.getWriter().write(expected); + + assertThat(committed).isTrue(); + + committed = false; + + response.getWriter().write(expected); + + assertThat(committed).isFalse(); + } } \ No newline at end of file