|
@@ -70,6 +70,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
request.setScheme("http");
|
|
request.setScheme("http");
|
|
request.setServerName("www.example.com");
|
|
request.setServerName("www.example.com");
|
|
request.setRequestURI("/mycontext/j_mock_post");
|
|
request.setRequestURI("/mycontext/j_mock_post");
|
|
|
|
+ request.setContextPath("/mycontext");
|
|
|
|
|
|
return request;
|
|
return request;
|
|
}
|
|
}
|
|
@@ -154,27 +155,27 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
|
|
|
// Setup our test object, to deny access
|
|
// Setup our test object, to deny access
|
|
MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(false);
|
|
MockAbstractProcessingFilter filter = new MockAbstractProcessingFilter(false);
|
|
- filter.setAuthenticationFailureUrl("/myApp/failed.jsp");
|
|
|
|
|
|
+ filter.setAuthenticationFailureUrl("/failed.jsp");
|
|
|
|
|
|
// Test
|
|
// Test
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
|
|
|
|
- assertEquals("/myApp/failed.jsp", response.getRedirectedUrl());
|
|
|
|
|
|
+ assertEquals("/mycontext/failed.jsp", response.getRedirectedUrl());
|
|
assertNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertNull(SecurityContextHolder.getContext().getAuthentication());
|
|
|
|
|
|
//Prepare again, this time using the exception mapping
|
|
//Prepare again, this time using the exception mapping
|
|
filter = new MockAbstractProcessingFilter(new AccountExpiredException("You're account is expired"));
|
|
filter = new MockAbstractProcessingFilter(new AccountExpiredException("You're account is expired"));
|
|
- filter.setAuthenticationFailureUrl("/myApp/failed.jsp");
|
|
|
|
|
|
+ filter.setAuthenticationFailureUrl("/failed.jsp");
|
|
|
|
|
|
Properties exceptionMappings = filter.getExceptionMappings();
|
|
Properties exceptionMappings = filter.getExceptionMappings();
|
|
- exceptionMappings.setProperty(AccountExpiredException.class.getName(), "/myApp/accountExpired.jsp");
|
|
|
|
|
|
+ exceptionMappings.setProperty(AccountExpiredException.class.getName(), "/accountExpired.jsp");
|
|
filter.setExceptionMappings(exceptionMappings);
|
|
filter.setExceptionMappings(exceptionMappings);
|
|
response = new MockHttpServletResponse();
|
|
response = new MockHttpServletResponse();
|
|
|
|
|
|
// Test
|
|
// Test
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
|
|
|
|
- assertEquals("/myApp/accountExpired.jsp", response.getRedirectedUrl());
|
|
|
|
|
|
+ assertEquals("/mycontext/accountExpired.jsp", response.getRedirectedUrl());
|
|
assertNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertNull(SecurityContextHolder.getContext().getAuthentication());
|
|
}
|
|
}
|
|
|
|
|
|
@@ -199,7 +200,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
|
|
|
// Test
|
|
// Test
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
- assertEquals("/logged_in.jsp", response.getRedirectedUrl());
|
|
|
|
|
|
+ assertEquals("/mycontext/logged_in.jsp", response.getRedirectedUrl());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString());
|
|
assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString());
|
|
}
|
|
}
|
|
@@ -226,6 +227,19 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
assertEquals("/fail", filter.getAuthenticationFailureUrl());
|
|
assertEquals("/fail", filter.getAuthenticationFailureUrl());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public void testDefaultUrlMuststartWithSlashOrHttpScheme() {
|
|
|
|
+ AbstractProcessingFilter filter = new MockAbstractProcessingFilter();
|
|
|
|
+
|
|
|
|
+ filter.setDefaultTargetUrl("/acceptableRelativeUrl");
|
|
|
|
+ filter.setDefaultTargetUrl("http://some.site.org/index.html");
|
|
|
|
+ filter.setDefaultTargetUrl("https://some.site.org/index.html");
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ filter.setDefaultTargetUrl("missingSlash");
|
|
|
|
+ fail("Shouldn't accept default target without leading slash");
|
|
|
|
+ } catch (IllegalArgumentException expected) {}
|
|
|
|
+ }
|
|
|
|
+
|
|
public void testIgnoresAnyServletPathOtherThanFilterProcessesUrl()
|
|
public void testIgnoresAnyServletPathOtherThanFilterProcessesUrl()
|
|
throws Exception {
|
|
throws Exception {
|
|
// Setup our HTTP request
|
|
// Setup our HTTP request
|
|
@@ -269,7 +283,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
|
|
|
// Test
|
|
// Test
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
- assertEquals("/logged_in.jsp", response.getRedirectedUrl());
|
|
|
|
|
|
+ assertEquals("/mycontext/logged_in.jsp", response.getRedirectedUrl());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString());
|
|
assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString());
|
|
}
|
|
}
|
|
@@ -354,7 +368,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
|
|
|
// Test
|
|
// Test
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
- assertEquals("/logged_in.jsp", response.getRedirectedUrl());
|
|
|
|
|
|
+ assertEquals("/mycontext/logged_in.jsp", response.getRedirectedUrl());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString());
|
|
assertEquals("test", SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString());
|
|
|
|
|
|
@@ -397,7 +411,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
|
|
|
// Test
|
|
// Test
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
- assertEquals("/foobar", response.getRedirectedUrl());
|
|
|
|
|
|
+ assertEquals("/mycontext/foobar", response.getRedirectedUrl());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
}
|
|
}
|
|
|
|
|
|
@@ -424,6 +438,27 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * SEC-297 fix.
|
|
|
|
+ */
|
|
|
|
+ public void testFullDefaultTargetUrlDoesNotHaveContextPathPrepended() throws Exception {
|
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
|
+ 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.setFilterProcessesUrl("/j_mock_post");
|
|
|
|
+ filter.setDefaultTargetUrl("http://monkeymachine.co.uk/");
|
|
|
|
+ filter.setAlwaysUseDefaultTargetUrl(true);
|
|
|
|
+
|
|
|
|
+ executeFilterInContainerSimulator(config, filter, request, response, chain);
|
|
|
|
+ assertEquals("http://monkeymachine.co.uk/", response.getRedirectedUrl());
|
|
|
|
+ assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
|
|
|
+ }
|
|
|
|
+
|
|
//~ Inner Classes ==================================================================================================
|
|
//~ Inner Classes ==================================================================================================
|
|
|
|
|
|
private class MockAbstractProcessingFilter extends AbstractProcessingFilter {
|
|
private class MockAbstractProcessingFilter extends AbstractProcessingFilter {
|