SEC-29: Save POST parameters on AuthenticationEntryPoint redirect.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,12 +17,14 @@ package org.acegisecurity.intercept.web;
|
||||
|
||||
import org.acegisecurity.MockFilterChain;
|
||||
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import org.jmock.MockObjectTestCase;
|
||||
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.jmock.MockObjectTestCase;
|
||||
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
|
||||
/**
|
||||
* Tests {@link FilterInvocation}.
|
||||
@@ -44,14 +46,14 @@ public class FilterInvocationTests extends MockObjectTestCase {
|
||||
|
||||
//~ Methods ================================================================
|
||||
|
||||
public final void setUp() throws Exception {
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
junit.textui.TestRunner.run(FilterInvocationTests.class);
|
||||
}
|
||||
|
||||
public final void setUp() throws Exception {
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
public void testGettersAndStringMethods() {
|
||||
MockHttpServletRequest request = new MockHttpServletRequest(null, null);
|
||||
request.setServletPath("/HelloWorld");
|
||||
@@ -73,7 +75,7 @@ public class FilterInvocationTests extends MockObjectTestCase {
|
||||
assertEquals("/HelloWorld/some/more/segments.html", fi.getRequestUrl());
|
||||
assertEquals("FilterInvocation: URL: /HelloWorld/some/more/segments.html",
|
||||
fi.toString());
|
||||
assertEquals("http://www.example.com:80/mycontext/HelloWorld/some/more/segments.html",
|
||||
assertEquals("http://www.example.com/mycontext/HelloWorld/some/more/segments.html",
|
||||
fi.getFullRequestUrl());
|
||||
}
|
||||
|
||||
@@ -81,7 +83,7 @@ public class FilterInvocationTests extends MockObjectTestCase {
|
||||
Class clazz = FilterInvocation.class;
|
||||
|
||||
try {
|
||||
clazz.getDeclaredConstructor((Class[])null);
|
||||
clazz.getDeclaredConstructor((Class[]) null);
|
||||
fail("Should have thrown NoSuchMethodException");
|
||||
} catch (NoSuchMethodException expected) {
|
||||
assertTrue(true);
|
||||
@@ -125,7 +127,7 @@ public class FilterInvocationTests extends MockObjectTestCase {
|
||||
}
|
||||
|
||||
public void testRejectsServletRequestWhichIsNotHttpServletRequest() {
|
||||
ServletRequest request = (ServletRequest)newDummy(ServletRequest.class);
|
||||
ServletRequest request = (ServletRequest) newDummy(ServletRequest.class);
|
||||
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||
MockFilterChain chain = new MockFilterChain();
|
||||
|
||||
@@ -167,7 +169,7 @@ public class FilterInvocationTests extends MockObjectTestCase {
|
||||
FilterInvocation fi = new FilterInvocation(request, response, chain);
|
||||
assertEquals("/HelloWorld?foo=bar", fi.getRequestUrl());
|
||||
assertEquals("FilterInvocation: URL: /HelloWorld?foo=bar", fi.toString());
|
||||
assertEquals("http://www.example.com:80/mycontext/HelloWorld?foo=bar",
|
||||
assertEquals("http://www.example.com/mycontext/HelloWorld?foo=bar",
|
||||
fi.getFullRequestUrl());
|
||||
}
|
||||
|
||||
@@ -185,7 +187,7 @@ public class FilterInvocationTests extends MockObjectTestCase {
|
||||
FilterInvocation fi = new FilterInvocation(request, response, chain);
|
||||
assertEquals("/HelloWorld", fi.getRequestUrl());
|
||||
assertEquals("FilterInvocation: URL: /HelloWorld", fi.toString());
|
||||
assertEquals("http://www.example.com:80/mycontext/HelloWorld",
|
||||
assertEquals("http://www.example.com/mycontext/HelloWorld",
|
||||
fi.getFullRequestUrl());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,9 @@ import org.acegisecurity.context.SecurityContextHolder;
|
||||
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
|
||||
|
||||
import org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices;
|
||||
import org.acegisecurity.ui.savedrequest.SavedRequest;
|
||||
|
||||
import org.acegisecurity.util.PortResolverImpl;
|
||||
|
||||
import org.springframework.mock.web.MockFilterConfig;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
@@ -91,6 +94,16 @@ public class AbstractProcessingFilterTests extends TestCase {
|
||||
junit.textui.TestRunner.run(AbstractProcessingFilterTests.class);
|
||||
}
|
||||
|
||||
private SavedRequest makeSavedRequestForUrl() {
|
||||
MockHttpServletRequest request = createMockRequest();
|
||||
request.setServletPath("/some_protected_file.html");
|
||||
request.setScheme("http");
|
||||
request.setServerName("www.example.com");
|
||||
request.setRequestURI("/mycontext/some_protected_file.html");
|
||||
|
||||
return new SavedRequest(request, new PortResolverImpl());
|
||||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
SecurityContextHolder.clearContext();
|
||||
@@ -399,8 +412,8 @@ public class AbstractProcessingFilterTests extends TestCase {
|
||||
// Setup our HTTP request
|
||||
MockHttpServletRequest request = createMockRequest();
|
||||
request.getSession()
|
||||
.setAttribute(AbstractProcessingFilter.ACEGI_SECURITY_TARGET_URL_KEY,
|
||||
"/my-destination");
|
||||
.setAttribute(AbstractProcessingFilter.ACEGI_SAVED_REQUEST_KEY,
|
||||
makeSavedRequestForUrl());
|
||||
|
||||
// Setup our filter configuration
|
||||
MockFilterConfig config = new MockFilterConfig(null);
|
||||
@@ -429,8 +442,8 @@ public class AbstractProcessingFilterTests extends TestCase {
|
||||
// Setup our HTTP request
|
||||
MockHttpServletRequest request = createMockRequest();
|
||||
request.getSession()
|
||||
.setAttribute(AbstractProcessingFilter.ACEGI_SECURITY_TARGET_URL_KEY,
|
||||
"/my-destination");
|
||||
.setAttribute(AbstractProcessingFilter.ACEGI_SAVED_REQUEST_KEY,
|
||||
makeSavedRequestForUrl());
|
||||
|
||||
// Setup our filter configuration
|
||||
MockFilterConfig config = new MockFilterConfig(null);
|
||||
@@ -446,7 +459,8 @@ public class AbstractProcessingFilterTests extends TestCase {
|
||||
// Test
|
||||
executeFilterInContainerSimulator(config, filter, request, response,
|
||||
chain);
|
||||
assertEquals("/my-destination", response.getRedirectedUrl());
|
||||
assertEquals(makeSavedRequestForUrl().getFullRequestUrl(),
|
||||
response.getRedirectedUrl());
|
||||
assertNotNull(SecurityContextHolder.getContext().getAuthentication());
|
||||
}
|
||||
|
||||
|
||||
@@ -28,8 +28,6 @@ import org.acegisecurity.context.SecurityContextHolder;
|
||||
|
||||
import org.acegisecurity.providers.anonymous.AnonymousAuthenticationToken;
|
||||
|
||||
import org.acegisecurity.ui.webapp.AuthenticationProcessingFilter;
|
||||
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
|
||||
@@ -101,8 +99,7 @@ public class ExceptionTranslationFilterTests extends TestCase {
|
||||
filter.doFilter(request, response, chain);
|
||||
assertEquals("/mycontext/login.jsp", response.getRedirectedUrl());
|
||||
assertEquals("http://www.example.com/mycontext/secure/page.html",
|
||||
request.getSession()
|
||||
.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_TARGET_URL_KEY));
|
||||
AbstractProcessingFilter.obtainFullRequestUrl(request));
|
||||
}
|
||||
|
||||
public void testAccessDeniedWhenNonAnonymous() throws Exception {
|
||||
@@ -192,8 +189,7 @@ public class ExceptionTranslationFilterTests extends TestCase {
|
||||
filter.doFilter(request, response, chain);
|
||||
assertEquals("/mycontext/login.jsp", response.getRedirectedUrl());
|
||||
assertEquals("http://www.example.com/mycontext/secure/page.html",
|
||||
request.getSession()
|
||||
.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_TARGET_URL_KEY));
|
||||
AbstractProcessingFilter.obtainFullRequestUrl(request));
|
||||
}
|
||||
|
||||
public void testRedirectedToLoginFormAndSessionShowsOriginalTargetWithExoticPortWhenAuthenticationException()
|
||||
@@ -221,8 +217,7 @@ public class ExceptionTranslationFilterTests extends TestCase {
|
||||
filter.doFilter(request, response, chain);
|
||||
assertEquals("/mycontext/login.jsp", response.getRedirectedUrl());
|
||||
assertEquals("http://www.example.com:8080/mycontext/secure/page.html",
|
||||
request.getSession()
|
||||
.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_TARGET_URL_KEY));
|
||||
AbstractProcessingFilter.obtainFullRequestUrl(request));
|
||||
}
|
||||
|
||||
public void testStartupDetectsMissingAuthenticationEntryPoint()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2004, 2005 Acegi Technology Pty Limited
|
||||
/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -19,6 +19,8 @@ import junit.framework.TestCase;
|
||||
|
||||
import org.acegisecurity.MockFilterConfig;
|
||||
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
@@ -26,8 +28,6 @@ import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
|
||||
|
||||
/**
|
||||
* Tests {@link SecurityContextHolderAwareRequestFilter}.
|
||||
@@ -48,23 +48,23 @@ public class SecurityContextHolderAwareRequestFilterTests extends TestCase {
|
||||
|
||||
//~ Methods ================================================================
|
||||
|
||||
public final void setUp() throws Exception {
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
junit.textui.TestRunner.run(SecurityContextHolderAwareRequestFilterTests.class);
|
||||
}
|
||||
|
||||
public final void setUp() throws Exception {
|
||||
super.setUp();
|
||||
}
|
||||
|
||||
public void testCorrectOperation() throws Exception {
|
||||
SecurityContextHolderAwareRequestFilter filter = new SecurityContextHolderAwareRequestFilter();
|
||||
filter.init(new MockFilterConfig());
|
||||
filter.doFilter(new MockHttpServletRequest(null, null), null,
|
||||
new MockFilterChain(SecurityContextHolderAwareRequestWrapper.class));
|
||||
new MockFilterChain(SavedRequestAwareWrapper.class));
|
||||
|
||||
// Now re-execute the filter, ensuring our replacement wrapper is still used
|
||||
filter.doFilter(new MockHttpServletRequest(null, null), null,
|
||||
new MockFilterChain(SecurityContextHolderAwareRequestWrapper.class));
|
||||
new MockFilterChain(SavedRequestAwareWrapper.class));
|
||||
|
||||
filter.destroy();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user