diff --git a/web/src/main/java/org/springframework/security/web/authentication/preauth/EnvironmentVariableAuthenticationFilter.java b/web/src/main/java/org/springframework/security/web/authentication/preauth/RequestAttributeAuthenticationFilter.java similarity index 70% rename from web/src/main/java/org/springframework/security/web/authentication/preauth/EnvironmentVariableAuthenticationFilter.java rename to web/src/main/java/org/springframework/security/web/authentication/preauth/RequestAttributeAuthenticationFilter.java index c717f23ceb..964b1ef944 100644 --- a/web/src/main/java/org/springframework/security/web/authentication/preauth/EnvironmentVariableAuthenticationFilter.java +++ b/web/src/main/java/org/springframework/security/web/authentication/preauth/RequestAttributeAuthenticationFilter.java @@ -20,52 +20,53 @@ import javax.servlet.http.HttpServletRequest; import org.springframework.util.Assert; /** - * A simple pre-authenticated filter which obtains the username from an environment variable, for - * use with SSO systems such as Stanford WebAuth or Shibboleth. + * A simple pre-authenticated filter which obtains the username from request attributes, + * for use with SSO systems such as Stanford WebAuth or Shibboleth. *

* As with most pre-authenticated scenarios, it is essential that the external * authentication system is set up correctly as this filter does no authentication * whatsoever. *

- * The property {@code principalEnvironmentVariable} is the name of the request environment variable - * that contains the username. It defaults to "REMOTE_USER" for compatibility with WebAuth and Shibboleth. + * The property {@code principalEnvironmentVariable} is the name of the request attribute + * that contains the username. It defaults to "REMOTE_USER" for compatibility with WebAuth + * and Shibboleth. *

- * If the environment variable is missing from the request, {@code getPreAuthenticatedPrincipal} will - * throw an exception. You can override this behaviour by setting the - * {@code exceptionIfVariableMissing} property. + * If the environment variable is missing from the request, + * {@code getPreAuthenticatedPrincipal} will throw an exception. You can override this + * behaviour by setting the {@code exceptionIfVariableMissing} property. * * * @author Milan Sevcik * @since 4.2 */ -public class EnvironmentVariableAuthenticationFilter extends - AbstractPreAuthenticatedProcessingFilter { +public class RequestAttributeAuthenticationFilter + extends AbstractPreAuthenticatedProcessingFilter { private String principalEnvironmentVariable = "REMOTE_USER"; private String credentialsEnvironmentVariable; private boolean exceptionIfVariableMissing = true; /** - * Read and returns the variable named by {@code principalEnvironmentVariable} from the - * request. + * Read and returns the variable named by {@code principalEnvironmentVariable} from + * the request. * - * @throws PreAuthenticatedCredentialsNotFoundException if the environment variable - * is missing and {@code exceptionIfVariableMissing} is set to {@code true}. + * @throws PreAuthenticatedCredentialsNotFoundException if the environment variable is + * missing and {@code exceptionIfVariableMissing} is set to {@code true}. */ protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) { - String principal = (String)request.getAttribute(principalEnvironmentVariable); + String principal = (String) request.getAttribute(principalEnvironmentVariable); if (principal == null && exceptionIfVariableMissing) { - throw new PreAuthenticatedCredentialsNotFoundException(principalEnvironmentVariable - + " variable not found in request."); + throw new PreAuthenticatedCredentialsNotFoundException( + principalEnvironmentVariable + " variable not found in request."); } return principal; } /** - * Credentials aren't usually applicable, but if a {@code credentialsEnvironmentVariable} is - * set, this will be read and used as the credentials value. Otherwise a dummy value - * will be used. + * Credentials aren't usually applicable, but if a + * {@code credentialsEnvironmentVariable} is set, this will be read and used as the + * credentials value. Otherwise a dummy value will be used. */ protected Object getPreAuthenticatedCredentials(HttpServletRequest request) { if (credentialsEnvironmentVariable != null) { @@ -77,13 +78,13 @@ public class EnvironmentVariableAuthenticationFilter extends public void setPrincipalEnvironmentVariable(String principalEnvironmentVariable) { Assert.hasText(principalEnvironmentVariable, - "principalEnvironmentVariable must not be empty or null"); + "principalEnvironmentVariable must not be empty or null"); this.principalEnvironmentVariable = principalEnvironmentVariable; } public void setCredentialsEnvironmentVariable(String credentialsEnvironmentVariable) { Assert.hasText(credentialsEnvironmentVariable, - "credentialsEnvironmentVariable must not be empty or null"); + "credentialsEnvironmentVariable must not be empty or null"); this.credentialsEnvironmentVariable = credentialsEnvironmentVariable; } diff --git a/web/src/test/java/org/springframework/security/web/authentication/preauth/envvariable/EnvironmentVariableAuthenticationFilterTests.java b/web/src/test/java/org/springframework/security/web/authentication/preauth/RequestAttributeAuthenticationFilterTests.java similarity index 81% rename from web/src/test/java/org/springframework/security/web/authentication/preauth/envvariable/EnvironmentVariableAuthenticationFilterTests.java rename to web/src/test/java/org/springframework/security/web/authentication/preauth/RequestAttributeAuthenticationFilterTests.java index 40afd9ac6c..ae0ecc1fce 100644 --- a/web/src/test/java/org/springframework/security/web/authentication/preauth/envvariable/EnvironmentVariableAuthenticationFilterTests.java +++ b/web/src/test/java/org/springframework/security/web/authentication/preauth/RequestAttributeAuthenticationFilterTests.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.security.web.authentication.preauth.envvariable; +package org.springframework.security.web.authentication.preauth; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; @@ -30,13 +30,13 @@ import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException; -import org.springframework.security.web.authentication.preauth.EnvironmentVariableAuthenticationFilter; +import org.springframework.security.web.authentication.preauth.RequestAttributeAuthenticationFilter; /** * * @author Milan Sevcik */ -public class EnvironmentVariableAuthenticationFilterTests { +public class RequestAttributeAuthenticationFilterTests { @After @Before @@ -49,7 +49,7 @@ public class EnvironmentVariableAuthenticationFilterTests { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain chain = new MockFilterChain(); - EnvironmentVariableAuthenticationFilter filter = new EnvironmentVariableAuthenticationFilter(); + RequestAttributeAuthenticationFilter filter = new RequestAttributeAuthenticationFilter(); filter.doFilter(request, response, chain); } @@ -60,13 +60,16 @@ public class EnvironmentVariableAuthenticationFilterTests { request.setAttribute("REMOTE_USER", "cat"); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain chain = new MockFilterChain(); - EnvironmentVariableAuthenticationFilter filter = new EnvironmentVariableAuthenticationFilter(); + RequestAttributeAuthenticationFilter filter = new RequestAttributeAuthenticationFilter(); filter.setAuthenticationManager(createAuthenticationManager()); filter.doFilter(request, response, chain); assertThat(SecurityContextHolder.getContext().getAuthentication()).isNotNull(); - assertThat(SecurityContextHolder.getContext().getAuthentication().getName()).isEqualTo("cat"); - assertThat(SecurityContextHolder.getContext().getAuthentication().getCredentials()).isEqualTo("N/A"); + assertThat(SecurityContextHolder.getContext().getAuthentication().getName()) + .isEqualTo("cat"); + assertThat( + SecurityContextHolder.getContext().getAuthentication().getCredentials()) + .isEqualTo("N/A"); } @Test @@ -75,13 +78,14 @@ public class EnvironmentVariableAuthenticationFilterTests { request.setAttribute("myUsernameVariable", "wolfman"); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain chain = new MockFilterChain(); - EnvironmentVariableAuthenticationFilter filter = new EnvironmentVariableAuthenticationFilter(); + RequestAttributeAuthenticationFilter filter = new RequestAttributeAuthenticationFilter(); filter.setAuthenticationManager(createAuthenticationManager()); filter.setPrincipalEnvironmentVariable("myUsernameVariable"); filter.doFilter(request, response, chain); assertThat(SecurityContextHolder.getContext().getAuthentication()).isNotNull(); - assertThat(SecurityContextHolder.getContext().getAuthentication().getName()).isEqualTo("wolfman"); + assertThat(SecurityContextHolder.getContext().getAuthentication().getName()) + .isEqualTo("wolfman"); } @Test @@ -89,7 +93,7 @@ public class EnvironmentVariableAuthenticationFilterTests { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain chain = new MockFilterChain(); - EnvironmentVariableAuthenticationFilter filter = new EnvironmentVariableAuthenticationFilter(); + RequestAttributeAuthenticationFilter filter = new RequestAttributeAuthenticationFilter(); filter.setAuthenticationManager(createAuthenticationManager()); filter.setCredentialsEnvironmentVariable("myCredentialsVariable"); request.setAttribute("REMOTE_USER", "cat"); @@ -97,7 +101,9 @@ public class EnvironmentVariableAuthenticationFilterTests { filter.doFilter(request, response, chain); assertThat(SecurityContextHolder.getContext().getAuthentication()).isNotNull(); - assertThat(SecurityContextHolder.getContext().getAuthentication().getCredentials()).isEqualTo("catspassword"); + assertThat( + SecurityContextHolder.getContext().getAuthentication().getCredentials()) + .isEqualTo("catspassword"); } @Test @@ -105,7 +111,7 @@ public class EnvironmentVariableAuthenticationFilterTests { throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); - EnvironmentVariableAuthenticationFilter filter = new EnvironmentVariableAuthenticationFilter(); + RequestAttributeAuthenticationFilter filter = new RequestAttributeAuthenticationFilter(); filter.setAuthenticationManager(createAuthenticationManager()); filter.setCheckForPrincipalChanges(true); request.setAttribute("REMOTE_USER", "cat"); @@ -116,7 +122,8 @@ public class EnvironmentVariableAuthenticationFilterTests { Authentication dog = SecurityContextHolder.getContext().getAuthentication(); assertThat(dog).isNotNull(); assertThat(dog.getName()).isEqualTo("dog"); - // Make sure authentication doesn't occur every time (i.e. if the variable *doesn't* + // Make sure authentication doesn't occur every time (i.e. if the variable + // *doesn't* // change) filter.setAuthenticationManager(mock(AuthenticationManager.class)); filter.doFilter(request, response, new MockFilterChain()); @@ -128,7 +135,7 @@ public class EnvironmentVariableAuthenticationFilterTests { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain chain = new MockFilterChain(); - EnvironmentVariableAuthenticationFilter filter = new EnvironmentVariableAuthenticationFilter(); + RequestAttributeAuthenticationFilter filter = new RequestAttributeAuthenticationFilter(); filter.setAuthenticationManager(createAuthenticationManager()); filter.doFilter(request, response, chain); @@ -140,7 +147,7 @@ public class EnvironmentVariableAuthenticationFilterTests { MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); MockFilterChain chain = new MockFilterChain(); - EnvironmentVariableAuthenticationFilter filter = new EnvironmentVariableAuthenticationFilter(); + RequestAttributeAuthenticationFilter filter = new RequestAttributeAuthenticationFilter(); filter.setExceptionIfVariableMissing(false); filter.setAuthenticationManager(createAuthenticationManager()); filter.doFilter(request, response, chain); @@ -151,8 +158,8 @@ public class EnvironmentVariableAuthenticationFilterTests { */ private AuthenticationManager createAuthenticationManager() { AuthenticationManager am = mock(AuthenticationManager.class); - when(am.authenticate(any(Authentication.class))).thenAnswer( - new Answer() { + when(am.authenticate(any(Authentication.class))) + .thenAnswer(new Answer() { public Authentication answer(InvocationOnMock invocation) throws Throwable { return (Authentication) invocation.getArguments()[0];