This is an automated email from the ASF dual-hosted git repository.

nixonrodrigues pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/master by this push:
     new d04a008d7 ATLAS-5431 Support Header based authentication / 
SPIFFE-aware header pre-auth for Atlas rest-notification service. (#787)
d04a008d7 is described below

commit d04a008d714506650a01b5af43f3b3a30f177868
Author: Nixon Rodrigues <[email protected]>
AuthorDate: Mon Oct 19 13:04:14 2026 +0530

    ATLAS-5431 Support Header based authentication / SPIFFE-aware header 
pre-auth for Atlas rest-notification service. (#787)
    
    Reuse AtlasHeaderPreAuthFilter from server-common, wire it into 
rest-notification security for header based authentication and SPIFFE 
verification.
---
 .../rest/web/security/AtlasSecurityConfig.java         | 18 +++++++++++++-----
 .../common}/filters/AtlasAuthenticationToken.java      |  2 +-
 .../common}/filters/AtlasHeaderPreAuthFilter.java      | 10 +++++-----
 .../server/common/security/AtlasSecurityConfig.java    |  8 ++++++--
 .../apache/atlas/web/security/AtlasSecurityConfig.java |  2 +-
 .../web/filters/AtlasHeaderPreAuthFilterTest.java      |  2 ++
 .../atlas/web/security/AtlasSecurityConfigTest.java    |  2 +-
 7 files changed, 29 insertions(+), 15 deletions(-)

diff --git 
a/rest-notification-webapp/src/main/java/org/apache/atlas/notification/rest/web/security/AtlasSecurityConfig.java
 
b/rest-notification-webapp/src/main/java/org/apache/atlas/notification/rest/web/security/AtlasSecurityConfig.java
index 566699567..9319e183e 100644
--- 
a/rest-notification-webapp/src/main/java/org/apache/atlas/notification/rest/web/security/AtlasSecurityConfig.java
+++ 
b/rest-notification-webapp/src/main/java/org/apache/atlas/notification/rest/web/security/AtlasSecurityConfig.java
@@ -17,6 +17,10 @@
  */
 package org.apache.atlas.notification.rest.web.security;
 
+import org.apache.atlas.server.common.filters.AtlasAuthenticationFilter;
+import org.apache.atlas.server.common.filters.AtlasCSRFPreventionFilter;
+import org.apache.atlas.server.common.filters.AtlasHeaderPreAuthFilter;
+import org.apache.atlas.server.common.filters.AtlasKnoxSSOAuthenticationFilter;
 import 
org.apache.atlas.server.common.security.AtlasAuthenticationFailureHandler;
 import org.apache.atlas.server.common.security.AtlasAuthenticationProvider;
 import 
org.apache.atlas.server.common.security.AtlasAuthenticationSuccessHandler;
@@ -52,19 +56,23 @@ import javax.inject.Inject;
 @EnableWebSecurity
 @EnableGlobalMethodSecurity(prePostEnabled = true)
 public class AtlasSecurityConfig extends 
org.apache.atlas.server.common.security.AtlasSecurityConfig {
+    private final AtlasHeaderPreAuthFilter headerPreAuthFilter;
+
     @Inject
-    public 
AtlasSecurityConfig(ObjectProvider<org.apache.atlas.server.common.filters.AtlasKnoxSSOAuthenticationFilter>
 ssoAuthenticationFilterProvider,
-                               
ObjectProvider<org.apache.atlas.server.common.filters.AtlasCSRFPreventionFilter>
 csrfPreventionFilterProvider,
-                               
ObjectProvider<org.apache.atlas.server.common.filters.AtlasAuthenticationFilter>
 atlasAuthenticationFilterProvider,
+    public 
AtlasSecurityConfig(ObjectProvider<AtlasKnoxSSOAuthenticationFilter> 
ssoAuthenticationFilterProvider,
+                               ObjectProvider<AtlasCSRFPreventionFilter> 
csrfPreventionFilterProvider,
+                               ObjectProvider<AtlasAuthenticationFilter> 
atlasAuthenticationFilterProvider,
                                AtlasAuthenticationProvider 
authenticationProvider,
                                AtlasAuthenticationSuccessHandler 
successHandler,
                                AtlasAuthenticationFailureHandler 
failureHandler,
                                
org.apache.atlas.server.common.filters.AtlasAuthenticationEntryPoint 
atlasAuthenticationEntryPoint,
                                Configuration configuration,
-                               
ObjectProvider<org.apache.atlas.server.common.filters.ActiveServerFilter> 
activeServerFilterProvider) {
+                               
ObjectProvider<org.apache.atlas.server.common.filters.ActiveServerFilter> 
activeServerFilterProvider,
+                               AtlasHeaderPreAuthFilter headerPreAuthFilter) {
         super(ssoAuthenticationFilterProvider, csrfPreventionFilterProvider, 
atlasAuthenticationFilterProvider,
                 authenticationProvider, successHandler, failureHandler, 
atlasAuthenticationEntryPoint, configuration,
                 activeServerFilterProvider);
+        this.headerPreAuthFilter = headerPreAuthFilter;
     }
 
     @Override
@@ -88,6 +96,6 @@ public class AtlasSecurityConfig extends 
org.apache.atlas.server.common.security
     protected void configure(HttpSecurity httpSecurity) throws Exception {
         configureCommonHttpSecurity(httpSecurity);
         addHaAndMigrationGuards(httpSecurity);
-        addCommonAuthFilters(httpSecurity);
+        addNotificationRestAuthFilters(httpSecurity, headerPreAuthFilter);
     }
 }
diff --git 
a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationToken.java
 
b/server-common/src/main/java/org/apache/atlas/server/common/filters/AtlasAuthenticationToken.java
similarity index 97%
rename from 
webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationToken.java
rename to 
server-common/src/main/java/org/apache/atlas/server/common/filters/AtlasAuthenticationToken.java
index 15cd70b9a..b4ef90b03 100644
--- 
a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasAuthenticationToken.java
+++ 
b/server-common/src/main/java/org/apache/atlas/server/common/filters/AtlasAuthenticationToken.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.atlas.web.filters;
+package org.apache.atlas.server.common.filters;
 
 import org.springframework.security.authentication.AbstractAuthenticationToken;
 import org.springframework.security.core.GrantedAuthority;
diff --git 
a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilter.java
 
b/server-common/src/main/java/org/apache/atlas/server/common/filters/AtlasHeaderPreAuthFilter.java
similarity index 95%
rename from 
webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilter.java
rename to 
server-common/src/main/java/org/apache/atlas/server/common/filters/AtlasHeaderPreAuthFilter.java
index ebb0d7caa..6dcdaf65b 100644
--- 
a/webapp/src/main/java/org/apache/atlas/web/filters/AtlasHeaderPreAuthFilter.java
+++ 
b/server-common/src/main/java/org/apache/atlas/server/common/filters/AtlasHeaderPreAuthFilter.java
@@ -16,11 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.atlas.web.filters;
+package org.apache.atlas.server.common.filters;
 
 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.atlas.utils.SpiffeIdUtil;
 import org.apache.commons.configuration2.Configuration;
@@ -29,6 +27,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.UserDetails;
 import 
org.springframework.security.web.authentication.WebAuthenticationDetails;
@@ -137,7 +136,7 @@ public class AtlasHeaderPreAuthFilter implements Filter {
         for (String role : rolesHeader.split(",")) {
             String trimmed = StringUtils.trimToNull(role);
             if (trimmed != null) {
-                ret.add(new 
org.springframework.security.core.authority.SimpleGrantedAuthority(trimmed));
+                ret.add(new SimpleGrantedAuthority(trimmed));
             }
         }
 
@@ -167,7 +166,8 @@ public class AtlasHeaderPreAuthFilter implements Filter {
 
                     if (username != null) {
                         List<GrantedAuthority> grantedAuths =
-                                
getAuthoritiesFromRolesHeader(httpRequest.getHeader(rolesHeaderName));
+                                getAuthoritiesFromRolesHeader(
+                                        rolesHeaderName != null ? 
httpRequest.getHeader(rolesHeaderName) : null);
 
                         UserDetails principal = new User(username, "", 
grantedAuths);
 
diff --git 
a/server-common/src/main/java/org/apache/atlas/server/common/security/AtlasSecurityConfig.java
 
b/server-common/src/main/java/org/apache/atlas/server/common/security/AtlasSecurityConfig.java
index 52739fb48..079064cf5 100644
--- 
a/server-common/src/main/java/org/apache/atlas/server/common/security/AtlasSecurityConfig.java
+++ 
b/server-common/src/main/java/org/apache/atlas/server/common/security/AtlasSecurityConfig.java
@@ -22,6 +22,7 @@ import 
org.apache.atlas.server.common.filters.AtlasAuthenticationEntryPoint;
 import org.apache.atlas.server.common.filters.AtlasAuthenticationFilter;
 import org.apache.atlas.server.common.filters.AtlasCSRFPreventionFilter;
 import 
org.apache.atlas.server.common.filters.AtlasDelegatingAuthenticationEntryPoint;
+import org.apache.atlas.server.common.filters.AtlasHeaderPreAuthFilter;
 import org.apache.atlas.server.common.filters.AtlasKnoxSSOAuthenticationFilter;
 import org.apache.atlas.server.common.filters.HeadersUtil;
 import org.apache.atlas.server.common.filters.spi.ActiveInstanceStateProvider;
@@ -178,10 +179,13 @@ public abstract class AtlasSecurityConfig extends 
WebSecurityConfigurerAdapter {
         }
     }
 
-    protected void addCommonAuthFilters(HttpSecurity httpSecurity) throws 
Exception {
+    protected void addNotificationRestAuthFilters(HttpSecurity httpSecurity,
+                                            AtlasHeaderPreAuthFilter 
headerPreAuthFilter) throws Exception {
+        httpSecurity.addFilterBefore(headerPreAuthFilter, 
BasicAuthenticationFilter.class);
+
         AtlasKnoxSSOAuthenticationFilter ssoAuthenticationFilter = 
ssoAuthenticationFilterProvider.getIfAvailable();
         if (ssoAuthenticationFilter != null) {
-            httpSecurity.addFilterBefore(ssoAuthenticationFilter, 
BasicAuthenticationFilter.class);
+            httpSecurity.addFilterAfter(ssoAuthenticationFilter, 
AtlasHeaderPreAuthFilter.class);
         }
 
         AtlasAuthenticationFilter atlasAuthenticationFilter = 
atlasAuthenticationFilterProvider.getIfAvailable();
diff --git 
a/webapp/src/main/java/org/apache/atlas/web/security/AtlasSecurityConfig.java 
b/webapp/src/main/java/org/apache/atlas/web/security/AtlasSecurityConfig.java
index 270323886..639ec4fa8 100644
--- 
a/webapp/src/main/java/org/apache/atlas/web/security/AtlasSecurityConfig.java
+++ 
b/webapp/src/main/java/org/apache/atlas/web/security/AtlasSecurityConfig.java
@@ -21,11 +21,11 @@ import 
org.apache.atlas.server.common.filters.ActiveServerFilter;
 import org.apache.atlas.server.common.filters.AtlasAuthenticationEntryPoint;
 import org.apache.atlas.server.common.filters.AtlasAuthenticationFilter;
 import org.apache.atlas.server.common.filters.AtlasCSRFPreventionFilter;
+import org.apache.atlas.server.common.filters.AtlasHeaderPreAuthFilter;
 import org.apache.atlas.server.common.filters.AtlasKnoxSSOAuthenticationFilter;
 import 
org.apache.atlas.server.common.security.AtlasAuthenticationFailureHandler;
 import org.apache.atlas.server.common.security.AtlasAuthenticationProvider;
 import 
org.apache.atlas.server.common.security.AtlasAuthenticationSuccessHandler;
-import org.apache.atlas.web.filters.AtlasHeaderPreAuthFilter;
 import org.apache.atlas.web.filters.AtlasJwtAuthWrapper;
 import org.apache.commons.configuration2.Configuration;
 import org.keycloak.adapters.AdapterDeploymentContext;
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 bf58e0e97..dde37d1e0 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
@@ -19,6 +19,8 @@
 package org.apache.atlas.web.filters;
 
 import org.apache.atlas.ApplicationProperties;
+import org.apache.atlas.server.common.filters.AtlasAuthenticationToken;
+import org.apache.atlas.server.common.filters.AtlasHeaderPreAuthFilter;
 import org.apache.commons.configuration2.Configuration;
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
diff --git 
a/webapp/src/test/java/org/apache/atlas/web/security/AtlasSecurityConfigTest.java
 
b/webapp/src/test/java/org/apache/atlas/web/security/AtlasSecurityConfigTest.java
index 3fbed332b..91b94b1eb 100644
--- 
a/webapp/src/test/java/org/apache/atlas/web/security/AtlasSecurityConfigTest.java
+++ 
b/webapp/src/test/java/org/apache/atlas/web/security/AtlasSecurityConfigTest.java
@@ -24,11 +24,11 @@ import 
org.apache.atlas.server.common.filters.AtlasAuthenticationEntryPoint;
 import org.apache.atlas.server.common.filters.AtlasAuthenticationFilter;
 import org.apache.atlas.server.common.filters.AtlasCSRFPreventionFilter;
 import 
org.apache.atlas.server.common.filters.AtlasDelegatingAuthenticationEntryPoint;
+import org.apache.atlas.server.common.filters.AtlasHeaderPreAuthFilter;
 import org.apache.atlas.server.common.filters.AtlasKnoxSSOAuthenticationFilter;
 import 
org.apache.atlas.server.common.security.AtlasAuthenticationFailureHandler;
 import org.apache.atlas.server.common.security.AtlasAuthenticationProvider;
 import 
org.apache.atlas.server.common.security.AtlasAuthenticationSuccessHandler;
-import org.apache.atlas.web.filters.AtlasHeaderPreAuthFilter;
 import org.apache.atlas.web.filters.AtlasJwtAuthWrapper;
 import org.apache.atlas.web.filters.StaleTransactionCleanupFilter;
 import org.apache.commons.configuration2.Configuration;

Reply via email to