@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user