@ -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 {