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

Spring Boot WebFlux中@CrossOrigin失效问题求助

问题排查与解决方案

一、最可能的原因:Angular请求URL缺少协议

你的Angular代码中baseUrl未指定http://协议,浏览器会将localhost:9095/api/userinfo解析为当前页面的相对路径(比如Angular运行在http://localhost:4200时,请求会被发往http://localhost:4200/localhost:9095/api/userinfo),这完全偏离了目标后端地址,直接触发跨域错误。

修改Angular代码:

export class HttpServiceService {
  // 补充http://协议
  private baseUrl = "http://localhost:9095/api/userinfo";

  constructor(private http: HttpClient) {}

  getUsers(): Observable<UserInfo[]> {
    return this.http.get<UserInfo[]>(this.baseUrl + "/users");
  }
}

二、WebFlux全局CORS配置补充(若上述修改后仍有问题)

虽然你使用了@CrossOrigin注解,但WebFlux的全局CORS配置有时比注解更可靠,能避免注解优先级冲突等潜在问题。可添加全局配置类:

创建WebFlux CORS全局配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

@Configuration
public class CorsConfig {

    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 允许所有来源
        config.addAllowedOrigin("*");
        // 允许所有请求方法
        config.addAllowedMethod("*");
        // 允许所有请求头
        config.addAllowedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 对所有路径应用CORS配置
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

三、额外检查点

  • 确认后端确实运行在9095端口,无端口冲突或启动失败情况。
  • 查看浏览器控制台的跨域错误详情,比如是否是Origin不被允许、请求方法/头受限等,可根据具体提示进一步排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:24:23