|
@@ -31,6 +31,7 @@ import org.springframework.security.util.PortResolverImpl;
|
|
|
import org.springframework.mock.web.MockFilterConfig;
|
|
|
import org.springframework.mock.web.MockHttpServletRequest;
|
|
|
import org.springframework.mock.web.MockHttpServletResponse;
|
|
|
+import org.springframework.mock.web.MockHttpSession;
|
|
|
|
|
|
import javax.servlet.Filter;
|
|
|
import javax.servlet.FilterChain;
|
|
@@ -40,6 +41,7 @@ import javax.servlet.ServletRequest;
|
|
|
import javax.servlet.ServletResponse;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
+import javax.servlet.http.HttpSession;
|
|
|
import java.io.IOException;
|
|
|
import java.util.Properties;
|
|
|
|
|
@@ -254,6 +256,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
public void testNormalOperationWithDefaultFilterProcessesUrl() throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
MockHttpServletRequest request = createMockRequest();
|
|
|
+ HttpSession sessionPreAuth = request.getSession();
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
MockFilterConfig config = new MockFilterConfig(null, null);
|
|
@@ -275,6 +278,8 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
assertEquals("/mycontext/logged_in.jsp", response.getRedirectedUrl());
|
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
|
assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString());
|
|
|
+ // Should still have the same session
|
|
|
+ assertEquals(sessionPreAuth, request.getSession());
|
|
|
}
|
|
|
|
|
|
public void testStartupDetectsInvalidAuthenticationFailureUrl() throws Exception {
|
|
@@ -373,7 +378,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
}
|
|
|
|
|
|
public void testSuccessfulAuthenticationButWithAlwaysUseDefaultTargetUrlCausesRedirectToDefaultTargetUrl()
|
|
|
- throws Exception {
|
|
|
+ throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
MockHttpServletRequest request = createMockRequest();
|
|
|
request.getSession().setAttribute(AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY, makeSavedRequestForUrl());
|
|
@@ -433,7 +438,6 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
|
|
|
// Setup our test object, to grant access
|
|
|
MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true);
|
|
|
- filter.setFilterProcessesUrl("/j_mock_post");
|
|
|
filter.setDefaultTargetUrl("http://monkeymachine.co.uk/");
|
|
|
filter.setAlwaysUseDefaultTargetUrl(true);
|
|
|
|
|
@@ -442,6 +446,48 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
|
}
|
|
|
|
|
|
+ public void testNewSessionIsCreatedIfInvalidateSessionOnSuccessfulAuthenticationIsSet() throws Exception {
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
+ HttpSession oldSession = request.getSession();
|
|
|
+ oldSession.setAttribute("test","test");
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null, null);
|
|
|
+
|
|
|
+ MockFilterChain chain = new MockFilterChain(true);
|
|
|
+ MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
+
|
|
|
+ // Setup our test object, to grant access
|
|
|
+ MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true);
|
|
|
+ filter.setInvalidateSessionOnSuccessfulAuthentication(true);
|
|
|
+ filter.setDefaultTargetUrl("http://monkeymachine.co.uk/");
|
|
|
+
|
|
|
+ executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
|
+
|
|
|
+ HttpSession newSession = request.getSession();
|
|
|
+ assertFalse(newSession.getId().equals(oldSession.getId()));
|
|
|
+ assertEquals("test", newSession.getAttribute("test"));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testAttributesAreNotMigratedToNewlyCreatedSessionIfMigrateAttributesIsFalse() throws Exception {
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
+ HttpSession oldSession = request.getSession();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null, null);
|
|
|
+
|
|
|
+ MockFilterChain chain = new MockFilterChain(true);
|
|
|
+ MockHttpServletResponse response = new MockHttpServletResponse();
|
|
|
+
|
|
|
+ // Setup our test object, to grant access
|
|
|
+ MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(true);
|
|
|
+ filter.setInvalidateSessionOnSuccessfulAuthentication(true);
|
|
|
+ filter.setMigrateInvalidatedSessionAttributes(false);
|
|
|
+ filter.setDefaultTargetUrl("http://monkeymachine.co.uk/");
|
|
|
+
|
|
|
+ executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
|
+
|
|
|
+ HttpSession newSession = request.getSession();
|
|
|
+ assertFalse(newSession.getId().equals(oldSession.getId()));
|
|
|
+ assertNull(newSession.getAttribute("test"));
|
|
|
+ }
|
|
|
+
|
|
|
//~ Inner Classes ==================================================================================================
|
|
|
|
|
|
private class MockAbstractProcessingFilter extends AbstractProcessingFilter {
|