springboot解决跨域

张开发
2026/4/8 15:42:11 15 分钟阅读

分享文章

springboot解决跨域
Spring Boot 解决跨域问题的三种实用方案在前后端分离的开发模式中跨域CORS是最常遇到的“拦路虎”之一。浏览器出于安全考虑默认会拦截非同源的请求导致前端无法正常获取后端数据。解决这一问题并不复杂Spring Boot 提供了从细粒度到全局的多种解决方案。以下是三种主流的处理方式开发者可根据实际场景灵活选择。方案一使用 CrossOrigin 注解细粒度控制这是最简单直接的方法适用于只需对特定接口开放跨域权限的场景。直接在 Controller 类或具体的方法上添加CrossOrigin注解即可。示例代码RestControllerRequestMapping(/api)// 允许指定域名访问最大有效期3600秒CrossOrigin(originshttp://localhost:8080,maxAge3600)publicclassUserController{GetMapping(/users)publicStringgetUsers(){returnUser List;}}这种方式虽然便捷但若项目中有大量接口都需要跨域逐个添加注解会显得繁琐且难以维护。方案二全局配置 WebMvcConfigurer推荐对于大多数企业级项目推荐使用全局配置。通过实现WebMvcConfigurer接口并重写addCorsMappings方法可以统一制定跨域规则避免代码冗余。示例代码ConfigurationpublicclassCorsConfigimplementsWebMvcConfigurer{OverridepublicvoidaddCorsMappings(CorsRegistryregistry){registry.addMapping(/**)// 对所有路径生效.allowedOriginPatterns(*)// 允许所有源SpringBoot 2.4 建议使用 patterns.allowedMethods(GET,POST,PUT,DELETE,OPTIONS).allowedHeaders(*).allowCredentials(true)// 允许携带 Cookie.maxAge(3600);}}这种方式一次配置全局生效是目前最规范、最通用的解决方案。方案三CorsFilter 过滤器底层控制如果你使用的是较早版本的 Spring Boot或者在配置拦截器时遇到了冲突使用CorsFilterBean 是一种更底层的解决思路。它在 Filter 层面处理跨域优先级更高。示例代码ConfigurationpublicclassFilterConfig{BeanpublicCorsFiltercorsFilter(){CorsConfigurationconfignewCorsConfiguration();config.addAllowedOriginPattern(*);config.addAllowedMethod(*);config.addAllowedHeader(*);config.setAllowCredentials(true);UrlBasedCorsConfigurationSourcesourcenewUrlBasedCorsConfigurationSource();source.registerCorsConfiguration(/**,config);returnnewCorsFilter(source);}}总结解决跨域问题的核心在于响应头信息的配置。对于简单的测试或单一接口CrossOrigin最快。对于正规项目开发WebMvcConfigurer 全局配置是首选。遇到拦截器冲突时尝试CorsFilter。建议在开发初期就确定好跨域策略避免后期因浏览器同源策略导致的接口调用失败。- -

更多文章