You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 APIM发布门户测试新API遇CORS及404错误求助

问题分析与解决方案

针对你遇到的CORS+404问题,结合Istio、WSO2 APIM和SpringBoot的环境,以下是具体的排查和解决步骤:

一、关于Filter包位置的结论

Filter所在的子包位置本身不会影响功能,核心问题是Spring容器是否能扫描到这个Filter并完成注册。只要子包在Spring的组件扫描范围内(或通过显式配置注册),Filter就能正常生效。

二、分步排查与解决

1. 先验证后端Filter是否真的生效

先绕过WSO2和Istio,直接访问SpringBoot服务的接口,发送OPTIONS预检请求,检查响应头是否包含Access-Control-Allow-Origin:

  • 如果直接访问后端正常,说明问题出在WSO2 APIM或Istio层面;
  • 如果直接访问也没有CORS头,说明Filter未被正确注册,按以下方式修复:
    • 若Filter用@WebFilter注解,需在SpringBoot主类添加@ServletComponentScan(basePackages = "你的Filter子包路径"),确保Spring扫描到该Filter;
    • 或者改用@Bean方式显式注册Filter,确保它的执行优先级最高:
      @Configuration
      public class CorsConfig {
          @Bean
          public FilterRegistrationBean<CorsFilter> corsFilter() {
              FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<>();
              registrationBean.setFilter(new CorsFilter());
              registrationBean.addUrlPatterns("/*");
              registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
              return registrationBean;
          }
      }
      
    • 检查application.properties是否添加spring.mvc.dispatch-options-request=true,避免SpringBoot自动拦截OPTIONS请求导致Filter未触发。

2. WSO2 APIM层面排查

因为API未发布且无订阅,WSO2的网关可能直接拦截了请求:

  • 路径配置错误导致404:核对API的上下文(Context)和资源路径(Resource Path),比如你请求的/test/book/v1/api/v1/book/category,要确认API上下文是不是/test/book/v1,资源路径是不是/api/v1/book/category,避免路径重复匹配失败;
  • WSO2自身CORS配置:WSO2网关会优先处理CORS,即使后端有Filter也可能被覆盖。进入API编辑器的Runtime Configurations -> CORS Configuration,启用CORS并设置:
    • 允许的Origin:*
    • 允许的Methods:包含OPTIONS、POST、GET等你需要的方法
    • 允许的Headers:*
  • 未发布API的访问权限:WSO2对未发布的API默认可能限制访问,需在API的Subscriptions页面开启测试权限,或生成测试令牌携带在请求头中访问。

3. Istio层面排查

Istio的Sidecar或网关可能拦截了OPTIONS请求:

  • 检查VirtualService配置:确保路由规则包含OPTIONS方法,或直接允许所有方法;
  • 配置Istio的CORS策略:如果Istio网关拦截了预检请求,可在VirtualService中添加CORS规则,比如:
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: test-book-api-vs
    spec:
      hosts:
      - host
      gateways:
      - your-gateway
      http:
      - match:
        - uri:
            prefix: /test/book/v1
        route:
        - destination:
            host: your-springboot-service
            port:
              number: 8080
        corsPolicy:
          allowOrigin:
          - "*"
          allowMethods:
          - POST
          - GET
          - PUT
          - OPTIONS
          - DELETE
          - PATCH
          allowHeaders:
          - "*"
          maxAge: "3600s"
    

三、排查顺序建议

  1. 直接访问后端服务验证Filter是否生效;
  2. 若后端正常,检查WSO2的API路径和CORS配置;
  3. 最后排查Istio的路由和CORS策略。

内容的提问来源于stack exchange,提问作者user2176576

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:22:44