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");
+ }
}