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

jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 4590dadbf7 [Improvement] Support multiple Accept header values in 
VersioningFilter (#8133)
4590dadbf7 is described below

commit 4590dadbf7146fc0086f193ac35fcd2a3e3c10c8
Author: Raj Gupta <[email protected]>
AuthorDate: Thu Aug 28 19:50:52 2025 +0530

    [Improvement] Support multiple Accept header values in VersioningFilter 
(#8133)
    
    ### What changes were proposed in this pull request?
    
    (Please outline the changes and how this PR fixes the issue.)
    
    ### Why are the changes needed?
    
    (Please clarify why the changes are needed. For instance,
      1. If you propose a new API, clarify the use case for a new API.
      2. If you fix a bug, describe the bug.)
    
    Fix: #8053
    
    ### Does this PR introduce _any_ user-facing change?
    
    (Please list the user-facing changes introduced by your change,
    including
      1. Change in user-facing APIs.
      2. Addition or removal of property keys.)
    
    ### How was this patch tested?
    
    (Please test your changes, and provide instructions on how to test it:
    1. If you add a feature or fix a bug, add a test to cover your changes.
    2. If you fix a flaky test, repeat it for many times to prove it works.)
---
 .../gravitino/server/web/VersioningFilter.java     |  2 +-
 .../gravitino/server/web/TestVersioningFilter.java | 42 ++++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/VersioningFilter.java 
b/server/src/main/java/org/apache/gravitino/server/web/VersioningFilter.java
index 1901c66553..7c2c71b32d 100644
--- a/server/src/main/java/org/apache/gravitino/server/web/VersioningFilter.java
+++ b/server/src/main/java/org/apache/gravitino/server/web/VersioningFilter.java
@@ -99,7 +99,7 @@ public class VersioningFilter implements Filter {
 
       // If version accept header is set, then we need to check if it is 
supported.
       Matcher m = ACCEPT_VERSION_REGEX.matcher(value);
-      if (m.matches()) {
+      if (m.find()) {
         int version = Integer.parseInt(m.group(1));
 
         if (!ApiVersion.isSupportedVersion(version)) {
diff --git 
a/server/src/test/java/org/apache/gravitino/server/web/TestVersioningFilter.java
 
b/server/src/test/java/org/apache/gravitino/server/web/TestVersioningFilter.java
index cf016523e3..6da270ea4f 100644
--- 
a/server/src/test/java/org/apache/gravitino/server/web/TestVersioningFilter.java
+++ 
b/server/src/test/java/org/apache/gravitino/server/web/TestVersioningFilter.java
@@ -259,4 +259,46 @@ public class TestVersioningFilter {
     assertTrue(actualHeaderNames.contains("Header2"));
     assertTrue(actualHeaderNames.contains("CustomHeader"));
   }
+
+  @Test
+  public void testDoFilterWithHeaderContainingValidVersionAsSubstring() throws 
Exception {
+    VersioningFilter filter = new VersioningFilter();
+    FilterChain mockChain = mock(FilterChain.class);
+    HttpServletRequest mockRequest = mock(HttpServletRequest.class);
+    HttpServletResponse mockResponse = mock(HttpServletResponse.class);
+    when(mockRequest.getHeaders("Accept"))
+        .thenReturn(
+            new Vector<>(
+                    Collections.singletonList(
+                        "application/vnd.gravitino.v1+json, application/json"))
+                .elements());
+
+    filter.doFilter(mockRequest, mockResponse, mockChain);
+    verify(mockChain).doFilter(any(), any());
+
+    reset(mockChain, mockResponse);
+
+    when(mockRequest.getHeaders("Accept"))
+        .thenReturn(
+            new Vector<>(
+                    Collections.singletonList(
+                        "application/vnd.gravitino.v2+json, application/json"))
+                .elements());
+
+    filter.doFilter(mockRequest, mockResponse, mockChain);
+    verify(mockChain, never()).doFilter(any(), any());
+    verify(mockResponse).sendError(HttpServletResponse.SC_NOT_ACCEPTABLE, 
"Unsupported version");
+
+    reset(mockChain, mockResponse);
+
+    when(mockRequest.getHeaders("Accept"))
+        .thenReturn(
+            new Vector<>(
+                    Collections.singletonList(
+                        "application/vnd.gravitino.v3+json; q=0.9, 
application/json"))
+                .elements());
+    filter.doFilter(mockRequest, mockResponse, mockChain);
+    verify(mockChain, never()).doFilter(any(), any());
+    verify(mockResponse).sendError(HttpServletResponse.SC_NOT_ACCEPTABLE, 
"Unsupported version");
+  }
 }

Reply via email to