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
相关产品推荐
相关产品推荐

