This is an automated email from the ASF dual-hosted git repository. abhi pushed a commit to branch ranger-2.9 in repository https://gitbox.apache.org/repos/asf/ranger.git
commit daf23a439bae1f3e300ec2743347099f522e2d00 Author: Abhishek Kumar <[email protected]> AuthorDate: Wed Mar 18 15:12:45 2026 -0700 RANGER-5499: Refactor to use Filter and fix error in catalina.out (cherry picked from commit a6c21a19aa2522f882301bccce03e6c28701522a) (cherry picked from commit 9a57bab6237a947d9864f699de2c31b00fc280bc) --- .../web/filter/RangerHeaderPreAuthFilter.java | 36 ++++++++++++++-------- .../web/filter/TestRangerHeaderPreAuthFilter.java | 8 ++--- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/security-admin/src/main/java/org/apache/ranger/security/web/filter/RangerHeaderPreAuthFilter.java b/security-admin/src/main/java/org/apache/ranger/security/web/filter/RangerHeaderPreAuthFilter.java index 89bb78750..6672e3c3c 100644 --- a/security-admin/src/main/java/org/apache/ranger/security/web/filter/RangerHeaderPreAuthFilter.java +++ b/security-admin/src/main/java/org/apache/ranger/security/web/filter/RangerHeaderPreAuthFilter.java @@ -32,9 +32,8 @@ import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.web.filter.GenericFilterBean; -import javax.annotation.PostConstruct; +import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; @@ -47,12 +46,12 @@ import java.util.Collection; import java.util.List; -public class RangerHeaderPreAuthFilter extends GenericFilterBean { +public class RangerHeaderPreAuthFilter implements Filter { private static final Logger LOG = LoggerFactory.getLogger(RangerHeaderPreAuthFilter.class); - public static final String PROP_HEADER_AUTH_ENABLED = "ranger.admin.authn.header.enabled"; - public static final String PROP_USERNAME_HEADER_NAME = "ranger.admin.authn.header.username"; - public static final String PROP_REQUEST_ID_HEADER_NAME = "ranger.admin.authn.header.requestid"; + public static final String PROP_HEADER_AUTH_ENABLED = "ranger.admin.authn.header.enabled"; + public static final String PROP_USERNAME_HEADER_NAME = "ranger.admin.authn.header.username"; + public static final String PROP_REQUEST_ID_HEADER_NAME = "ranger.admin.authn.header.requestid"; private boolean headerAuthEnabled; private String userNameHeaderName; @@ -60,21 +59,32 @@ public class RangerHeaderPreAuthFilter extends GenericFilterBean { @Autowired UserMgr userMgr; - @PostConstruct - public void initialize(FilterConfig filterConfig) throws ServletException { + public RangerHeaderPreAuthFilter() { + loadConfiguration(); + } + + @Override + public void init(FilterConfig config) throws ServletException { + loadConfiguration(); + } + + private void loadConfiguration() { headerAuthEnabled = PropertiesUtil.getBooleanProperty(PROP_HEADER_AUTH_ENABLED, false); userNameHeaderName = PropertiesUtil.getProperty(PROP_USERNAME_HEADER_NAME); } @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { - HttpServletRequest httpRequest = (HttpServletRequest) request; + public void destroy() { + } + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (headerAuthEnabled) { Authentication existingAuthn = SecurityContextHolder.getContext().getAuthentication(); if (existingAuthn == null || !existingAuthn.isAuthenticated()) { - String username = StringUtils.trimToNull(httpRequest.getHeader(userNameHeaderName)); + HttpServletRequest httpRequest = (HttpServletRequest) request; + String username = StringUtils.trimToNull(httpRequest.getHeader(userNameHeaderName)); if (StringUtils.isNotBlank(username)) { List<GrantedAuthority> grantedAuthorities = getAuthoritiesFromRanger(username); @@ -101,8 +111,8 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha * Loads authorities from Ranger DB */ private List<GrantedAuthority> getAuthoritiesFromRanger(String username) { - List<GrantedAuthority> ret = new ArrayList<>(); - Collection<String> roleList = userMgr.getRolesByLoginId(username); + List<GrantedAuthority> ret = new ArrayList<>(); + Collection<String> roleList = userMgr.getRolesByLoginId(username); if (roleList != null) { for (String role : roleList) { diff --git a/security-admin/src/test/java/org/apache/ranger/security/web/filter/TestRangerHeaderPreAuthFilter.java b/security-admin/src/test/java/org/apache/ranger/security/web/filter/TestRangerHeaderPreAuthFilter.java index 2ed69a6fb..e90dd6fae 100644 --- a/security-admin/src/test/java/org/apache/ranger/security/web/filter/TestRangerHeaderPreAuthFilter.java +++ b/security-admin/src/test/java/org/apache/ranger/security/web/filter/TestRangerHeaderPreAuthFilter.java @@ -75,7 +75,7 @@ public void testDoFilter_disabled_passesThrough() throws Exception { UserMgr userMgr = mock(UserMgr.class); filter.userMgr = userMgr; - filter.initialize(null); + filter.init(null); HttpServletRequest request = mock(HttpServletRequest.class); HttpServletResponse response = mock(HttpServletResponse.class); @@ -97,7 +97,7 @@ public void testDoFilter_enabled_missingUsername_passesThrough() throws Exceptio UserMgr userMgr = mock(UserMgr.class); filter.userMgr = userMgr; - filter.initialize(null); + filter.init(null); HttpServletRequest request = mock(HttpServletRequest.class); HttpServletResponse response = mock(HttpServletResponse.class); @@ -121,7 +121,7 @@ public void testDoFilter_enabled_withUsername_setsAuthenticationFromRangerDbRole UserMgr userMgr = mock(UserMgr.class); filter.userMgr = userMgr; - filter.initialize(null); + filter.init(null); when(userMgr.getRolesByLoginId("joeuser")).thenReturn(Arrays.asList("ROLE_SYS_ADMIN", "ROLE_USER")); @@ -160,7 +160,7 @@ public void testDoFilter_enabled_existingAuthenticatedContext_doesNotOverrideAut UserMgr userMgr = mock(UserMgr.class); filter.userMgr = userMgr; - filter.initialize(null); + filter.init(null); UsernamePasswordAuthenticationToken existingAuth = new UsernamePasswordAuthenticationToken("existing-user", "pwd", Collections.singletonList(new SimpleGrantedAuthority("test-role")));
