|  | @@ -16,11 +16,16 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  package org.springframework.security.web.authentication.switchuser;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import static org.assertj.core.api.Assertions.*;
 | 
	
		
			
				|  |  | -import static org.mockito.Mockito.*;
 | 
	
		
			
				|  |  | +import java.util.ArrayList;
 | 
	
		
			
				|  |  | +import java.util.List;
 | 
	
		
			
				|  |  | +import javax.servlet.FilterChain;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import org.junit.*;
 | 
	
		
			
				|  |  | +import org.junit.After;
 | 
	
		
			
				|  |  | +import org.junit.Before;
 | 
	
		
			
				|  |  | +import org.junit.Rule;
 | 
	
		
			
				|  |  | +import org.junit.Test;
 | 
	
		
			
				|  |  |  import org.junit.rules.ExpectedException;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import org.springframework.mock.web.MockHttpServletRequest;
 | 
	
		
			
				|  |  |  import org.springframework.mock.web.MockHttpServletResponse;
 | 
	
		
			
				|  |  |  import org.springframework.security.authentication.AccountExpiredException;
 | 
	
	
		
			
				|  | @@ -42,8 +47,10 @@ import org.springframework.security.web.DefaultRedirectStrategy;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.util.matcher.AnyRequestMatcher;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import javax.servlet.FilterChain;
 | 
	
		
			
				|  |  | -import java.util.*;
 | 
	
		
			
				|  |  | +import static org.assertj.core.api.Assertions.assertThat;
 | 
	
		
			
				|  |  | +import static org.mockito.Mockito.mock;
 | 
	
		
			
				|  |  | +import static org.mockito.Mockito.never;
 | 
	
		
			
				|  |  | +import static org.mockito.Mockito.verify;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Tests
 | 
	
	
		
			
				|  | @@ -75,6 +82,7 @@ public class SwitchUserFilterTests {
 | 
	
		
			
				|  |  |  		request.setScheme("http");
 | 
	
		
			
				|  |  |  		request.setServerName("localhost");
 | 
	
		
			
				|  |  |  		request.setRequestURI("/login/impersonate");
 | 
	
		
			
				|  |  | +		request.setMethod("POST");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return request;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -125,6 +133,20 @@ public class SwitchUserFilterTests {
 | 
	
		
			
				|  |  |  		assertThat(filter.requiresExitUser(request)).isFalse();
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	@Test
 | 
	
		
			
				|  |  | +	// gh-4183
 | 
	
		
			
				|  |  | +	public void requiresExitUserWhenGetThenDoesNotMatch() {
 | 
	
		
			
				|  |  | +		SwitchUserFilter filter = new SwitchUserFilter();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		MockHttpServletRequest request = new MockHttpServletRequest();
 | 
	
		
			
				|  |  | +		request.setScheme("http");
 | 
	
		
			
				|  |  | +		request.setServerName("localhost");
 | 
	
		
			
				|  |  | +		request.setRequestURI("/login/impersonate");
 | 
	
		
			
				|  |  | +		request.setMethod("GET");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		assertThat(filter.requiresExitUser(request)).isFalse();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void requiresExitUserWhenMatcherThenWorks() {
 | 
	
		
			
				|  |  |  		SwitchUserFilter filter = new SwitchUserFilter();
 | 
	
	
		
			
				|  | @@ -159,6 +181,20 @@ public class SwitchUserFilterTests {
 | 
	
		
			
				|  |  |  		assertThat(filter.requiresSwitchUser(request)).isFalse();
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	@Test
 | 
	
		
			
				|  |  | +	// gh-4183
 | 
	
		
			
				|  |  | +	public void requiresSwitchUserWhenGetThenDoesNotMatch() {
 | 
	
		
			
				|  |  | +		SwitchUserFilter filter = new SwitchUserFilter();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		MockHttpServletRequest request = new MockHttpServletRequest();
 | 
	
		
			
				|  |  | +		request.setScheme("http");
 | 
	
		
			
				|  |  | +		request.setServerName("localhost");
 | 
	
		
			
				|  |  | +		request.setRequestURI("/login/impersonate");
 | 
	
		
			
				|  |  | +		request.setMethod("GET");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		assertThat(filter.requiresSwitchUser(request)).isFalse();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void requiresSwitchUserWhenMatcherThenWorks() {
 | 
	
		
			
				|  |  |  		SwitchUserFilter filter = new SwitchUserFilter();
 |