This is an automated email from the ASF dual-hosted git repository.
jerryshao 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 243ea26019 [#11029] fix(web): Handle null URI in WebUIFilter (#11034)
243ea26019 is described below
commit 243ea26019682ec8d082c2493d986772ea0ae43d
Author: Qi Yu <[email protected]>
AuthorDate: Mon May 11 20:01:25 2026 +0800
[#11029] fix(web): Handle null URI in WebUIFilter (#11034)
### What changes were proposed in this pull request?
Add a null guard for `HttpServletRequest#getRequestURI()` in
`WebUIFilter`. When the request URI is null, the filter now passes the
request through the filter chain instead of trying to rewrite it to a
Web UI static resource.
This PR also adds a unit test covering the null URI path.
### Why are the changes needed?
`WebUIFilter` previously called `path.lastIndexOf("/")` without checking
whether `path` was null. If `getRequestURI()` returned null, the request
failed with a `NullPointerException` and Jetty returned 500.
Fix: #11029
### Does this PR introduce _any_ user-facing change?
No API or configuration changes. Malformed or proxy-affected requests
with a null request URI no longer fail in `WebUIFilter` with an NPE.
### How was this patch tested?
```bash
./gradlew :server:spotlessApply
./gradlew :server:test --tests
org.apache.gravitino.server.web.ui.WebUIFilterTest -PskipITs
```
---
.../org/apache/gravitino/server/web/ui/WebUIFilter.java | 5 +++++
.../apache/gravitino/server/web/ui/WebUIFilterTest.java | 15 +++++++++++++++
2 files changed, 20 insertions(+)
diff --git
a/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java
b/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java
index 9a87fcccdd..82e67ab064 100644
--- a/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java
+++ b/server/src/main/java/org/apache/gravitino/server/web/ui/WebUIFilter.java
@@ -36,6 +36,11 @@ public class WebUIFilter implements Filter {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String path = httpRequest.getRequestURI();
+ if (path == null) {
+ chain.doFilter(request, response);
+ return;
+ }
+
String lastPathSegment = path.substring(path.lastIndexOf("/") + 1);
if (path.equals("/") || path.equals("/ui") || path.equals("/ui/")) {
diff --git
a/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java
b/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java
index 6051023613..f4a094dd7f 100644
---
a/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java
+++
b/server/src/test/java/org/apache/gravitino/server/web/ui/WebUIFilterTest.java
@@ -34,6 +34,21 @@ import javax.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.Test;
public class WebUIFilterTest {
+ @Test
+ public void testNullRequestUriPassesThroughFilterChain() throws
ServletException, IOException {
+ WebUIFilter filter = new WebUIFilter();
+ HttpServletRequest request = mock(HttpServletRequest.class);
+ ServletResponse response = mock(ServletResponse.class);
+ FilterChain chain = mock(FilterChain.class);
+
+ when(request.getRequestURI()).thenReturn(null);
+
+ filter.doFilter(request, response, chain);
+
+ verify(chain).doFilter(request, response);
+ verify(request, never()).getRequestDispatcher(any());
+ }
+
@Test
public void testNestedDirectoryRequestForwardsToIndexHtml() throws
ServletException, IOException {
WebUIFilter filter = new WebUIFilter();