This is an automated email from the ASF dual-hosted git repository. nixonrodrigues pushed a commit to branch ATLAS-5409 in repository https://gitbox.apache.org/repos/asf/atlas.git
commit a292b6fd580e923e83bb01521183a82def281191 Author: Ramachandran Krishnan <[email protected]> AuthorDate: Wed Aug 19 17:08:45 2026 +0530 ATLAS-5385: Rename header auth property keys only Drop AtlasHeaderAuthConfiguration and keep the existing filter logic. Update atlas.authn.header.* properties to atlas.authentication.method.header.*. --- .../web/filters/AtlasHeaderAuthConfiguration.java | 134 --------------------- .../web/filters/AtlasHeaderPreAuthFilter.java | 44 ++++--- .../filters/AtlasHeaderAuthConfigurationTest.java | 128 -------------------- .../web/filters/AtlasHeaderPreAuthFilterTest.java | 89 +++++--------- 4 files changed, 61 insertions(+), 334 deletions(-) diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderAuthConfiguration.java b/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderAuthConfiguration.java deleted file mode 100644 index c551588b7..000000000 --- a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderAuthConfiguration.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.atlas.web.filters; - -import org.apache.commons.configuration2.Configuration; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.servlet.http.HttpServletRequest; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -public final class AtlasHeaderAuthConfiguration { - private static final Logger LOG = LoggerFactory.getLogger(AtlasHeaderAuthConfiguration.class); - - public static final String PROP_HEADER_AUTH_ENABLED = "atlas.authentication.header.enabled"; - public static final String PROP_METHOD_HEADER_PREFIX = "atlas.authentication.method.header"; - - public static final String KEY_USERNAME = "username"; - public static final String KEY_ROLES = "roles"; - public static final String KEY_REQUEST_ID = "requestid"; - - private final boolean enabled; - private final Map<String, String> headerNamesByKey; - - private AtlasHeaderAuthConfiguration(boolean enabled, Map<String, String> headerNamesByKey) { - this.enabled = enabled; - this.headerNamesByKey = headerNamesByKey; - } - - public static AtlasHeaderAuthConfiguration load(Configuration configuration) { - if (configuration == null || !configuration.getBoolean(PROP_HEADER_AUTH_ENABLED, false)) { - return disabled(); - } - - Map<String, String> headerNamesByKey = new HashMap<>(); - - applyMethodHeaderMappings(configuration.subset(PROP_METHOD_HEADER_PREFIX), headerNamesByKey); - - return new AtlasHeaderAuthConfiguration(true, Collections.unmodifiableMap(headerNamesByKey)); - } - - public boolean isEnabled() { - return enabled; - } - - public Set<String> getKeys() { - return headerNamesByKey.keySet(); - } - - public String getHeaderName(String key) { - return headerNamesByKey.get(key); - } - - public String readHeaderValue(HttpServletRequest request, String key) { - String headerName = getHeaderName(key); - - if (headerName == null || request == null) { - return null; - } - - return StringUtils.trimToNull(request.getHeader(headerName)); - } - - private static AtlasHeaderAuthConfiguration disabled() { - return new AtlasHeaderAuthConfiguration(false, Collections.emptyMap()); - } - - private static void applyMethodHeaderMappings(Configuration methodHeaders, Map<String, String> headerNamesByKey) { - if (methodHeaders == null) { - return; - } - - Iterator<String> keys = methodHeaders.getKeys(); - - while (keys.hasNext()) { - String propertyKey = keys.next(); - String logicalKey = normalizeLogicalKey(propertyKey); - String httpHeaderName = StringUtils.trimToNull(methodHeaders.getString(propertyKey)); - - if (logicalKey == null) { - LOG.warn("Ignoring unrecognized header property key '{}'", propertyKey); - continue; - } - - if (httpHeaderName == null) { - headerNamesByKey.remove(logicalKey); - continue; - } - - headerNamesByKey.put(logicalKey, httpHeaderName); - } - } - - private static String normalizeLogicalKey(String propertyKey) { - if (StringUtils.isBlank(propertyKey)) { - return null; - } - - switch (propertyKey.trim()) { - case KEY_USERNAME: - return KEY_USERNAME; - - case KEY_ROLES: - return KEY_ROLES; - - case "request-id": - return KEY_REQUEST_ID; - - default: - return null; - } - } -} diff --git a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilter.java b/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilter.java index 32db1afa8..0add05e06 100644 --- a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilter.java +++ b/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilter.java @@ -22,6 +22,7 @@ import org.apache.atlas.ApplicationProperties; import org.apache.atlas.server.common.filters.AtlasResponseRequestWrapper; import org.apache.atlas.server.common.filters.HeadersUtil; import org.apache.atlas.server.common.model.User; +import org.apache.commons.configuration2.Configuration; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,9 +52,16 @@ import java.util.UUID; public class AtlasHeaderPreAuthFilter implements Filter { private static final Logger LOG = LoggerFactory.getLogger(AtlasHeaderPreAuthFilter.class); - private static final String REQUEST_ID_ATTRIBUTE = "atlas.request.id"; + public static final String PROP_HEADER_AUTH_ENABLED = "atlas.authentication.header.enabled"; + public static final String PROP_USERNAME_HEADER = "atlas.authentication.method.header.username"; + public static final String PROP_ROLES_HEADER = "atlas.authentication.method.header.roles"; + public static final String PROP_REQUEST_ID_HEADER = "atlas.authentication.method.header.request-id"; + public static final String REQUEST_ID_ATTRIBUTE = "atlas.request.id"; - private AtlasHeaderAuthConfiguration headerAuthConfiguration; + private Configuration configuration; + private boolean headerAuthEnabled; + private String userNameHeaderName; + private String rolesHeaderName; @Inject public AtlasHeaderPreAuthFilter() { @@ -62,23 +70,30 @@ public class AtlasHeaderPreAuthFilter implements Filter { private void loadConfiguration() { try { - headerAuthConfiguration = AtlasHeaderAuthConfiguration.load(ApplicationProperties.get()); + configuration = ApplicationProperties.get(); } catch (Exception e) { LOG.error("Error loading application properties for header pre-auth", e); - headerAuthConfiguration = AtlasHeaderAuthConfiguration.load(null); + configuration = null; } + if (configuration == null) { + headerAuthEnabled = false; + userNameHeaderName = null; + rolesHeaderName = null; + return; + } + headerAuthEnabled = configuration.getBoolean(PROP_HEADER_AUTH_ENABLED, false); + userNameHeaderName = StringUtils.trimToNull(configuration.getString(PROP_USERNAME_HEADER, "")); + rolesHeaderName = StringUtils.trimToNull(configuration.getString(PROP_ROLES_HEADER, "")); } private List<GrantedAuthority> getAuthoritiesFromRolesHeader(String rolesHeader) { List<GrantedAuthority> ret = new ArrayList<>(); - if (StringUtils.isBlank(rolesHeader)) { return ret; } for (String role : rolesHeader.split(",")) { String trimmed = StringUtils.trimToNull(role); - if (trimmed != null) { ret.add(new org.springframework.security.core.authority.SimpleGrantedAuthority(trimmed)); } @@ -102,15 +117,15 @@ public class AtlasHeaderPreAuthFilter implements Filter { HeadersUtil.setSecurityHeaders(responseWrapper); try { - if (headerAuthConfiguration.isEnabled()) { + if (headerAuthEnabled) { Authentication pre = SecurityContextHolder.getContext().getAuthentication(); if (pre == null || !pre.isAuthenticated()) { - String username = headerAuthConfiguration.readHeaderValue(httpRequest, AtlasHeaderAuthConfiguration.KEY_USERNAME); + String username = StringUtils.trimToNull(httpRequest.getHeader(userNameHeaderName)); if (username != null) { - String rolesHeaderValue = headerAuthConfiguration.readHeaderValue(httpRequest, AtlasHeaderAuthConfiguration.KEY_ROLES); - List<GrantedAuthority> grantedAuths = getAuthoritiesFromRolesHeader(rolesHeaderValue); + List<GrantedAuthority> grantedAuths = + getAuthoritiesFromRolesHeader(httpRequest.getHeader(rolesHeaderName)); UserDetails principal = new User(username, "", grantedAuths); @@ -127,7 +142,6 @@ public class AtlasHeaderPreAuthFilter implements Filter { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); String requestId = getRequestId(auth, httpRequest); - httpRequest.setAttribute(REQUEST_ID_ATTRIBUTE, requestId); chain.doFilter(servletRequest, responseWrapper); @@ -139,10 +153,12 @@ public class AtlasHeaderPreAuthFilter implements Filter { } private String getRequestId(Authentication auth, HttpServletRequest request) { - if (auth instanceof AtlasAuthenticationToken && - ((AtlasAuthenticationToken) auth).getAuthType() == AtlasAuthenticationToken.AUTH_TYPE_TRUSTED_PROXY) { - String requestId = headerAuthConfiguration.readHeaderValue(request, AtlasHeaderAuthConfiguration.KEY_REQUEST_ID); + String requestIdHeaderName = configuration != null ? configuration.getString(PROP_REQUEST_ID_HEADER) : null; + if (requestIdHeaderName != null && + auth instanceof AtlasAuthenticationToken && + ((AtlasAuthenticationToken) auth).getAuthType() == AtlasAuthenticationToken.AUTH_TYPE_TRUSTED_PROXY) { + String requestId = StringUtils.trimToNull(request.getHeader(requestIdHeaderName)); if (requestId != null) { return requestId; } diff --git a/webapp/src/test/java/org/apache/atlas/web/filters/AtlasHeaderAuthConfigurationTest.java b/webapp/src/test/java/org/apache/atlas/web/filters/AtlasHeaderAuthConfigurationTest.java deleted file mode 100644 index 07d69b76d..000000000 --- a/webapp/src/test/java/org/apache/atlas/web/filters/AtlasHeaderAuthConfigurationTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.atlas.web.filters; - -import org.apache.commons.configuration2.MapConfiguration; -import org.testng.annotations.Test; - -import java.util.HashMap; -import java.util.Map; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNull; -import static org.testng.Assert.assertTrue; - -public class AtlasHeaderAuthConfigurationTest { - @Test - public void testDisabledWhenNotConfigured() { - AtlasHeaderAuthConfiguration config = AtlasHeaderAuthConfiguration.load(new MapConfiguration(new HashMap<>())); - - assertFalse(config.isEnabled()); - assertTrue(config.getKeys().isEmpty()); - } - - @Test - public void testEnabledWithoutMappingsHasNoHeaders() { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - - AtlasHeaderAuthConfiguration config = AtlasHeaderAuthConfiguration.load(new MapConfiguration(properties)); - - assertTrue(config.isEnabled()); - assertTrue(config.getKeys().isEmpty()); - } - - @Test - public void testMethodHeaderMappings() { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "username"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".roles", "roles"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".request-id", "requestid"); - - AtlasHeaderAuthConfiguration config = AtlasHeaderAuthConfiguration.load(new MapConfiguration(properties)); - - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_USERNAME), "username"); - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_ROLES), "roles"); - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_REQUEST_ID), "requestid"); - } - - @Test - public void testCustomProxyHeaderNames() { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "X-Forwarded-User"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".roles", "X-Forwarded-Groups"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".request-id", "X-Request-Id"); - - AtlasHeaderAuthConfiguration config = AtlasHeaderAuthConfiguration.load(new MapConfiguration(properties)); - - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_USERNAME), "X-Forwarded-User"); - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_ROLES), "X-Forwarded-Groups"); - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_REQUEST_ID), "X-Request-Id"); - } - - @Test - public void testOnlyConfiguredHeadersAreMapped() { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "X-Forwarded-User"); - - AtlasHeaderAuthConfiguration config = AtlasHeaderAuthConfiguration.load(new MapConfiguration(properties)); - - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_USERNAME), "X-Forwarded-User"); - assertNull(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_ROLES)); - assertNull(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_REQUEST_ID)); - } - - @Test - public void testBlankPropertyRemovesMapping() { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "username"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".roles", " "); - - AtlasHeaderAuthConfiguration config = AtlasHeaderAuthConfiguration.load(new MapConfiguration(properties)); - - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_USERNAME), "username"); - assertNull(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_ROLES)); - } - - @Test - public void testUnrecognizedPropertyKeyIsIgnored() { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "username"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".user", "ignored-user-header"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".requestid", "ignored-requestid-header"); - - AtlasHeaderAuthConfiguration config = AtlasHeaderAuthConfiguration.load(new MapConfiguration(properties)); - - assertEquals(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_USERNAME), "username"); - assertNull(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_ROLES)); - assertNull(config.getHeaderName(AtlasHeaderAuthConfiguration.KEY_REQUEST_ID)); - } -} diff --git a/webapp/src/test/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilterTest.java b/webapp/src/test/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilterTest.java index 4c820f8e5..b74452e3a 100644 --- a/webapp/src/test/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilterTest.java +++ b/webapp/src/test/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilterTest.java @@ -20,7 +20,6 @@ package org.apache.atlas.web.filters; import org.apache.atlas.ApplicationProperties; import org.apache.commons.configuration2.Configuration; -import org.apache.commons.configuration2.MapConfiguration; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.MockitoAnnotations; @@ -37,8 +36,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -46,7 +43,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertNull; import static org.testng.Assert.assertSame; import static org.testng.Assert.assertTrue; @@ -60,6 +56,9 @@ public class AtlasHeaderPreAuthFilterTest { @Mock private FilterChain filterChain; + @Mock + private Configuration configuration; + @BeforeMethod public void setUp() { MockitoAnnotations.initMocks(this); @@ -73,16 +72,20 @@ public class AtlasHeaderPreAuthFilterTest { @Test public void testDoFilterEnabledWithUsernameAndRoles() throws Exception { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "X-Forwarded-User"); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".roles", "X-Forwarded-Groups"); - + when(configuration.getBoolean(AtlasHeaderPreAuthFilter.PROP_HEADER_AUTH_ENABLED, false)).thenReturn(true); + when(configuration.getString(AtlasHeaderPreAuthFilter.PROP_USERNAME_HEADER, "")) + .thenReturn("X-Forwarded-User"); + when(configuration.getString(AtlasHeaderPreAuthFilter.PROP_ROLES_HEADER, "")) + .thenReturn("X-Forwarded-Groups"); when(request.getHeader("X-Forwarded-User")).thenReturn("alice"); when(request.getHeader("X-Forwarded-Groups")).thenReturn("ROLE_ADMIN, ROLE_USER"); - runFilter(new MapConfiguration(properties)); + try (MockedStatic<ApplicationProperties> appProps = org.mockito.Mockito.mockStatic(ApplicationProperties.class)) { + appProps.when(ApplicationProperties::get).thenReturn(configuration); + + AtlasHeaderPreAuthFilter filter = new AtlasHeaderPreAuthFilter(); + filter.doFilter(request, response, filterChain); + } Authentication auth = SecurityContextHolder.getContext().getAuthentication(); assertNotNull(auth); @@ -99,73 +102,43 @@ public class AtlasHeaderPreAuthFilterTest { @Test public void testDoFilterEnabledWithoutUsernameDoesNotAuthenticate() throws IOException, ServletException { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "X-Forwarded-User"); - + when(configuration.getBoolean(AtlasHeaderPreAuthFilter.PROP_HEADER_AUTH_ENABLED, false)).thenReturn(true); + when(configuration.getString(AtlasHeaderPreAuthFilter.PROP_USERNAME_HEADER, "")) + .thenReturn("X-Forwarded-User"); + when(configuration.getString(AtlasHeaderPreAuthFilter.PROP_ROLES_HEADER, "")) + .thenReturn("X-Forwarded-Groups"); when(request.getHeader("X-Forwarded-User")).thenReturn(" "); - runFilter(new MapConfiguration(properties)); - - assertNull(SecurityContextHolder.getContext().getAuthentication()); - verify(filterChain).doFilter(eq(request), any(HttpServletResponse.class)); - } - - @Test - public void testDoFilterEnabledWithoutAnyHeadersContinuesUnauthenticated() throws Exception { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); + try (MockedStatic<ApplicationProperties> appProps = org.mockito.Mockito.mockStatic(ApplicationProperties.class)) { + appProps.when(ApplicationProperties::get).thenReturn(configuration); - runFilter(new MapConfiguration(properties)); + AtlasHeaderPreAuthFilter filter = new AtlasHeaderPreAuthFilter(); + filter.doFilter(request, response, filterChain); + } - assertNull(SecurityContextHolder.getContext().getAuthentication()); + assertEquals(SecurityContextHolder.getContext().getAuthentication(), null); verify(filterChain).doFilter(eq(request), any(HttpServletResponse.class)); } - @Test - public void testDoFilterAuthenticatesWithUsernameOnly() throws Exception { - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "username"); - - when(request.getHeader("username")).thenReturn("alice"); - - runFilter(new MapConfiguration(properties)); - - Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - assertNotNull(auth); - assertEquals(((UserDetails) auth.getPrincipal()).getUsername(), "alice"); - assertTrue(auth.getAuthorities().isEmpty()); - } - @Test public void testDoFilterEnabledKeepsExistingAuthentication() throws IOException, ServletException { Authentication existing = org.mockito.Mockito.mock(Authentication.class); when(existing.isAuthenticated()).thenReturn(true); SecurityContextHolder.getContext().setAuthentication(existing); - Map<String, Object> properties = new HashMap<>(); - - properties.put(AtlasHeaderAuthConfiguration.PROP_HEADER_AUTH_ENABLED, true); - properties.put(AtlasHeaderAuthConfiguration.PROP_METHOD_HEADER_PREFIX + ".username", "X-Forwarded-User"); - + when(configuration.getBoolean(AtlasHeaderPreAuthFilter.PROP_HEADER_AUTH_ENABLED, false)).thenReturn(true); + when(configuration.getString(AtlasHeaderPreAuthFilter.PROP_USERNAME_HEADER, "")) + .thenReturn("X-Forwarded-User"); when(request.getHeader("X-Forwarded-User")).thenReturn("alice"); - runFilter(new MapConfiguration(properties)); - - assertSame(SecurityContextHolder.getContext().getAuthentication(), existing); - verify(filterChain).doFilter(eq(request), any(HttpServletResponse.class)); - } - - private void runFilter(Configuration configuration) throws Exception { try (MockedStatic<ApplicationProperties> appProps = org.mockito.Mockito.mockStatic(ApplicationProperties.class)) { appProps.when(ApplicationProperties::get).thenReturn(configuration); AtlasHeaderPreAuthFilter filter = new AtlasHeaderPreAuthFilter(); filter.doFilter(request, response, filterChain); } + + assertSame(SecurityContextHolder.getContext().getAuthentication(), existing); + verify(filterChain).doFilter(eq(request), any(HttpServletResponse.class)); } }
