Polish contribution

Resolves: #1243
This commit is contained in:
Vedran Pavic
2018-11-02 22:26:17 +01:00
parent c8f3d1a1ec
commit 3bfdb9be93
2 changed files with 20 additions and 7 deletions

View File

@@ -74,6 +74,7 @@ import org.springframework.session.SessionRepository;
* @since 1.0 * @since 1.0
* @author Rob Winch * @author Rob Winch
* @author Vedran Pavic * @author Vedran Pavic
* @author Josh Cummings
*/ */
@Order(SessionRepositoryFilter.DEFAULT_ORDER) @Order(SessionRepositoryFilter.DEFAULT_ORDER)
public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFilter { public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFilter {
@@ -416,7 +417,14 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
} }
} }
private final class SessionCommittingRequestDispatcher implements RequestDispatcher { /**
* Ensures session is committed before issuing an include.
*
* @since 2.1.2
*/
private final class SessionCommittingRequestDispatcher
implements RequestDispatcher {
private final RequestDispatcher delegate; private final RequestDispatcher delegate;
SessionCommittingRequestDispatcher(RequestDispatcher delegate) { SessionCommittingRequestDispatcher(RequestDispatcher delegate) {
@@ -424,15 +432,18 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
} }
@Override @Override
public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException { public void forward(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
this.delegate.forward(request, response); this.delegate.forward(request, response);
} }
@Override @Override
public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException { public void include(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
SessionRepositoryRequestWrapper.this.commitSession(); SessionRepositoryRequestWrapper.this.commitSession();
this.delegate.include(request, response); this.delegate.include(request, response);
} }
} }
} }

View File

@@ -1170,17 +1170,19 @@ public class SessionRepositoryFilterTests {
}); });
} }
@Test @Test // gh-1243
public void doFilterInclude() throws Exception { public void doFilterInclude() throws Exception {
doFilter(new DoInFilter() { doFilter(new DoInFilter() {
@Override @Override
public void doFilter(HttpServletRequest wrappedRequest, public void doFilter(HttpServletRequest wrappedRequest,
HttpServletResponse wrappedResponse) throws IOException, ServletException { HttpServletResponse wrappedResponse)
throws IOException, ServletException {
String id = wrappedRequest.getSession().getId(); String id = wrappedRequest.getSession().getId();
wrappedRequest.getRequestDispatcher("/").include(wrappedRequest, wrappedResponse); wrappedRequest.getRequestDispatcher("/").include(wrappedRequest,
wrappedResponse);
assertThat( assertThat(
SessionRepositoryFilterTests.this.sessionRepository.findById(id)) SessionRepositoryFilterTests.this.sessionRepository.findById(id))
.isNotNull(); .isNotNull();
} }
}); });
} }