|
@@ -17,19 +17,32 @@ package net.sf.acegisecurity.ui;
|
|
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
|
|
-import net.sf.acegisecurity.*;
|
|
|
+import net.sf.acegisecurity.AccountExpiredException;
|
|
|
+import net.sf.acegisecurity.AuthenticationException;
|
|
|
+import net.sf.acegisecurity.BadCredentialsException;
|
|
|
+import net.sf.acegisecurity.Authentication;
|
|
|
+import net.sf.acegisecurity.GrantedAuthority;
|
|
|
+import net.sf.acegisecurity.GrantedAuthorityImpl;
|
|
|
+import net.sf.acegisecurity.MockAuthenticationManager;
|
|
|
import net.sf.acegisecurity.context.ContextHolder;
|
|
|
import net.sf.acegisecurity.context.security.SecureContextImpl;
|
|
|
import net.sf.acegisecurity.context.security.SecureContextUtils;
|
|
|
import net.sf.acegisecurity.providers.UsernamePasswordAuthenticationToken;
|
|
|
import net.sf.acegisecurity.ui.rememberme.TokenBasedRememberMeServices;
|
|
|
|
|
|
-import java.io.IOException;
|
|
|
-
|
|
|
-import java.util.Properties;
|
|
|
+import org.springframework.mock.web.MockHttpServletResponse;
|
|
|
+import org.springframework.mock.web.MockHttpServletRequest;
|
|
|
+import org.springframework.mock.web.MockFilterConfig;
|
|
|
|
|
|
-import javax.servlet.*;
|
|
|
+import javax.servlet.Filter;
|
|
|
+import javax.servlet.FilterChain;
|
|
|
+import javax.servlet.FilterConfig;
|
|
|
+import javax.servlet.ServletException;
|
|
|
+import javax.servlet.ServletRequest;
|
|
|
+import javax.servlet.ServletResponse;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.Properties;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -86,12 +99,10 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
public void testFailedAuthenticationRedirectsAppropriately()
|
|
|
throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
- MockHttpServletRequest request = new MockHttpServletRequest("");
|
|
|
- request.setServletPath("/j_mock_post");
|
|
|
- request.setRequestURL("http://www.example.com/mycontext/j_mock_post");
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
- MockFilterConfig config = new MockFilterConfig();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null);
|
|
|
|
|
|
// Setup our expectation that the filter chain will not be invoked, as we redirect to authenticationFailureUrl
|
|
|
MockFilterChain chain = new MockFilterChain(false);
|
|
@@ -105,7 +116,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
executeFilterInContainerSimulator(config, filter, request, response,
|
|
|
chain);
|
|
|
|
|
|
- assertEquals("/myApp/failed.jsp", response.getRedirect());
|
|
|
+ assertEquals("/myApp/failed.jsp", response.getRedirectedUrl());
|
|
|
assertNull(SecureContextUtils.getSecureContext().getAuthentication());
|
|
|
|
|
|
//Prepare again, this time using the exception mapping
|
|
@@ -117,25 +128,25 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
exceptionMappings.setProperty(AccountExpiredException.class.getName(),
|
|
|
"/myApp/accountExpired.jsp");
|
|
|
filter.setExceptionMappings(exceptionMappings);
|
|
|
+ response = new MockHttpServletResponse();
|
|
|
|
|
|
// Test
|
|
|
executeFilterInContainerSimulator(config, filter, request, response,
|
|
|
chain);
|
|
|
|
|
|
- assertEquals("/myApp/accountExpired.jsp", response.getRedirect());
|
|
|
+ assertEquals("/myApp/accountExpired.jsp", response.getRedirectedUrl());
|
|
|
assertNull(SecureContextUtils.getSecureContext().getAuthentication());
|
|
|
}
|
|
|
|
|
|
public void testFilterProcessesUrlVariationsRespected()
|
|
|
throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
- MockHttpServletRequest request = new MockHttpServletRequest("");
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
request.setServletPath("/j_OTHER_LOCATION");
|
|
|
- request.setRequestURL(
|
|
|
- "http://www.example.com/mycontext/j_OTHER_LOCATION");
|
|
|
+ request.setRequestURI("/mycontext/j_OTHER_LOCATION");
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
- MockFilterConfig config = new MockFilterConfig();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null);
|
|
|
|
|
|
// Setup our expectation that the filter chain will not be invoked, as we redirect to defaultTargetUrl
|
|
|
MockFilterChain chain = new MockFilterChain(false);
|
|
@@ -149,7 +160,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
// Test
|
|
|
executeFilterInContainerSimulator(config, filter, request, response,
|
|
|
chain);
|
|
|
- assertEquals("/logged_in.jsp", response.getRedirect());
|
|
|
+ assertEquals("/logged_in.jsp", response.getRedirectedUrl());
|
|
|
assertNotNull(SecureContextUtils.getSecureContext().getAuthentication());
|
|
|
assertEquals("test",
|
|
|
SecureContextUtils.getSecureContext().getAuthentication()
|
|
@@ -182,12 +193,12 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
public void testIgnoresAnyServletPathOtherThanFilterProcessesUrl()
|
|
|
throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
- MockHttpServletRequest request = new MockHttpServletRequest("");
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
request.setServletPath("/some.file.html");
|
|
|
- request.setRequestURL("http://www.example.com/mycontext/some.file.html");
|
|
|
+ request.setRequestURI("/mycontext/some.file.html");
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
- MockFilterConfig config = new MockFilterConfig();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null);
|
|
|
|
|
|
// Setup our expectation that the filter chain will be invoked, as our request is for a page the filter isn't monitoring
|
|
|
MockFilterChain chain = new MockFilterChain(true);
|
|
@@ -204,12 +215,10 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
public void testNormalOperationWithDefaultFilterProcessesUrl()
|
|
|
throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
- MockHttpServletRequest request = new MockHttpServletRequest("");
|
|
|
- request.setServletPath("/j_mock_post");
|
|
|
- request.setRequestURL("http://www.example.com/mycontext/j_mock_post");
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
- MockFilterConfig config = new MockFilterConfig();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null);
|
|
|
|
|
|
// Setup our expectation that the filter chain will not be invoked, as we redirect to defaultTargetUrl
|
|
|
MockFilterChain chain = new MockFilterChain(false);
|
|
@@ -226,7 +235,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
// Test
|
|
|
executeFilterInContainerSimulator(config, filter, request, response,
|
|
|
chain);
|
|
|
- assertEquals("/logged_in.jsp", response.getRedirect());
|
|
|
+ assertEquals("/logged_in.jsp", response.getRedirectedUrl());
|
|
|
assertNotNull(SecureContextUtils.getSecureContext().getAuthentication());
|
|
|
assertEquals("test",
|
|
|
SecureContextUtils.getSecureContext().getAuthentication()
|
|
@@ -301,12 +310,10 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
public void testSuccessLoginThenFailureLoginResultsInSessionLoosingToken()
|
|
|
throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
- MockHttpServletRequest request = new MockHttpServletRequest("");
|
|
|
- request.setServletPath("/j_mock_post");
|
|
|
- request.setRequestURL("http://www.example.com/mycontext/j_mock_post");
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
- MockFilterConfig config = new MockFilterConfig();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null);
|
|
|
|
|
|
// Setup our expectation that the filter chain will not be invoked, as we redirect to defaultTargetUrl
|
|
|
MockFilterChain chain = new MockFilterChain(false);
|
|
@@ -320,7 +327,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
// Test
|
|
|
executeFilterInContainerSimulator(config, filter, request, response,
|
|
|
chain);
|
|
|
- assertEquals("/logged_in.jsp", response.getRedirect());
|
|
|
+ assertEquals("/logged_in.jsp", response.getRedirectedUrl());
|
|
|
assertNotNull(SecureContextUtils.getSecureContext().getAuthentication());
|
|
|
assertEquals("test",
|
|
|
SecureContextUtils.getSecureContext().getAuthentication()
|
|
@@ -346,14 +353,12 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
public void testSuccessfulAuthenticationButWithAlwaysUseDefaultTargetUrlCausesRedirectToDefaultTargetUrl()
|
|
|
throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
- MockHttpServletRequest request = new MockHttpServletRequest("");
|
|
|
- request.setServletPath("/j_mock_post");
|
|
|
- request.setRequestURL("http://www.example.com/mycontext/j_mock_post");
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
request.getSession().setAttribute(AbstractProcessingFilter.ACEGI_SECURITY_TARGET_URL_KEY,
|
|
|
"/my-destination");
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
- MockFilterConfig config = new MockFilterConfig();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null);
|
|
|
|
|
|
// Setup our expectation that the filter chain will be invoked, as we want to go to the location requested in the session
|
|
|
MockFilterChain chain = new MockFilterChain(true);
|
|
@@ -370,21 +375,19 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
// Test
|
|
|
executeFilterInContainerSimulator(config, filter, request, response,
|
|
|
chain);
|
|
|
- assertEquals("/foobar", response.getRedirect());
|
|
|
+ assertEquals("/foobar", response.getRedirectedUrl());
|
|
|
assertNotNull(SecureContextUtils.getSecureContext().getAuthentication());
|
|
|
}
|
|
|
|
|
|
public void testSuccessfulAuthenticationCausesRedirectToSessionSpecifiedUrl()
|
|
|
throws Exception {
|
|
|
// Setup our HTTP request
|
|
|
- MockHttpServletRequest request = new MockHttpServletRequest("");
|
|
|
- request.setServletPath("/j_mock_post");
|
|
|
- request.setRequestURL("http://www.example.com/mycontext/j_mock_post");
|
|
|
+ MockHttpServletRequest request = createMockRequest();
|
|
|
request.getSession().setAttribute(AbstractProcessingFilter.ACEGI_SECURITY_TARGET_URL_KEY,
|
|
|
"/my-destination");
|
|
|
|
|
|
// Setup our filter configuration
|
|
|
- MockFilterConfig config = new MockFilterConfig();
|
|
|
+ MockFilterConfig config = new MockFilterConfig(null);
|
|
|
|
|
|
// Setup our expectation that the filter chain will be invoked, as we want to go to the location requested in the session
|
|
|
MockFilterChain chain = new MockFilterChain(true);
|
|
@@ -397,7 +400,7 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
// Test
|
|
|
executeFilterInContainerSimulator(config, filter, request, response,
|
|
|
chain);
|
|
|
- assertEquals("/my-destination", response.getRedirect());
|
|
|
+ assertEquals("/my-destination", response.getRedirectedUrl());
|
|
|
assertNotNull(SecureContextUtils.getSecureContext().getAuthentication());
|
|
|
}
|
|
|
|
|
@@ -419,6 +422,17 @@ public class AbstractProcessingFilterTests extends TestCase {
|
|
|
filter.destroy();
|
|
|
}
|
|
|
|
|
|
+ private MockHttpServletRequest createMockRequest() {
|
|
|
+ MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
+
|
|
|
+ request.setServletPath("/j_mock_post");
|
|
|
+ request.setScheme("http");
|
|
|
+ request.setServerName("www.example.com");
|
|
|
+ request.setRequestURI("/mycontext/j_mock_post");
|
|
|
+
|
|
|
+ return request;
|
|
|
+ }
|
|
|
+
|
|
|
//~ Inner Classes ==========================================================
|
|
|
|
|
|
private class MockAbstractProcessingFilter extends AbstractProcessingFilter {
|