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

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


The following commit(s) were added to refs/heads/master by this push:
     new 577c22ff27 fix(web): continue disallowed cors preflight chain (#7108)
577c22ff27 is described below

commit 577c22ff2707dcbbcdf4f34253091d3736a54235
Author: Liming Deng <[email protected]>
AuthorDate: Wed Sep 23 12:34:10 2026 +0800

    fix(web): continue disallowed cors preflight chain (#7108)
    
    Co-authored-by: aias00 <[email protected]>
---
 .../org/apache/shenyu/web/filter/CrossFilter.java  |  8 ++---
 .../apache/shenyu/web/filter/CrossFilterTest.java  | 36 ++++++++++++++++++++++
 2 files changed, 40 insertions(+), 4 deletions(-)

diff --git 
a/shenyu-web/src/main/java/org/apache/shenyu/web/filter/CrossFilter.java 
b/shenyu-web/src/main/java/org/apache/shenyu/web/filter/CrossFilter.java
index 6d147dfe17..0aa4c6b074 100644
--- a/shenyu-web/src/main/java/org/apache/shenyu/web/filter/CrossFilter.java
+++ b/shenyu-web/src/main/java/org/apache/shenyu/web/filter/CrossFilter.java
@@ -112,10 +112,10 @@ public class CrossFilter implements WebFilter {
                 // "Access-Control-Allow-Credentials"
                 this.filterSameHeader(headers, 
HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS,
                         
String.valueOf(this.filterConfig.isAllowCredentials()));
-            }
-            if (request.getMethod() == HttpMethod.OPTIONS) {
-                response.setStatusCode(HttpStatus.OK);
-                return Mono.empty();
+                if (request.getMethod() == HttpMethod.OPTIONS) {
+                    response.setStatusCode(HttpStatus.OK);
+                    return Mono.empty();
+                }
             }
         }
         return chain.filter(exchange);
diff --git 
a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java 
b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java
index 699a0ad6c7..68172c0b1d 100644
--- a/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java
+++ b/shenyu-web/src/test/java/org/apache/shenyu/web/filter/CrossFilterTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shenyu.common.config.ShenyuConfig.CrossFilterConfig;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.mock.http.server.reactive.MockServerHttpRequest;
 import org.springframework.mock.web.server.MockServerWebExchange;
@@ -33,6 +34,8 @@ import java.util.HashSet;
 import java.util.regex.Pattern;
 
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 /**
@@ -141,6 +144,39 @@ public final class CrossFilterTest {
                 .verifyComplete();
     }
 
+    @Test
+    public void testOptionsRequestFromDisallowedOriginContinuesFilterChain() {
+        ServerWebExchange exchange = 
MockServerWebExchange.from(MockServerHttpRequest
+                .options("http://localhost:8080";)
+                .header(HttpHeaders.ORIGIN, "http://disallowed.example";)
+                .build());
+        WebFilterChain chain = mock(WebFilterChain.class);
+        when(chain.filter(exchange)).thenReturn(Mono.empty());
+
+        StepVerifier.create(new CrossFilter(new 
CrossFilterConfig()).filter(exchange, chain))
+                .verifyComplete();
+
+        verify(chain).filter(exchange);
+        Assertions.assertNull(exchange.getResponse().getStatusCode());
+    }
+
+    @Test
+    public void testOptionsRequestFromAllowedOriginIsHandled() {
+        ServerWebExchange exchange = 
MockServerWebExchange.from(MockServerHttpRequest
+                .options("http://localhost:8080";)
+                .header(HttpHeaders.ORIGIN, "http://allowed.example";)
+                .build());
+        WebFilterChain chain = mock(WebFilterChain.class);
+        CrossFilterConfig filterConfig = new CrossFilterConfig();
+        filterConfig.setAllowedAnyOrigin(true);
+
+        StepVerifier.create(new CrossFilter(filterConfig).filter(exchange, 
chain))
+                .verifyComplete();
+
+        verify(chain, never()).filter(exchange);
+        Assertions.assertEquals(HttpStatus.OK, 
exchange.getResponse().getStatusCode());
+    }
+
     @Test
     public void testOriginRegex() {
         ServerWebExchange exchange = 
MockServerWebExchange.from(MockServerHttpRequest

Reply via email to