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

如何在Spring Boot开发环境中仅为指定控制器启用@CrossOrigin?

实现Spring Boot开发环境专属的CORS配置

完全可以实现开发环境仅为/api/auth路径开启CORS,生产环境自动关闭的需求,推荐两种简单可靠的方案:

方案一:基于@Profile的全局CORS配置(推荐)

通过创建仅在开发环境生效的配置类,精准控制指定路径的CORS规则,生产环境不会加载该配置,从根源避免安全风险。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
@Profile("dev") // 仅当激活dev环境时生效
public class DevExclusiveCorsConfig {

    @Bean
    public CorsFilter corsAuthFilter() {
        CorsConfiguration corsConfig = new CorsConfiguration();
        corsConfig.setAllowCredentials(true);
        corsConfig.addAllowedOrigin("*"); // 开发环境允许所有源
        corsConfig.addAllowedHeader("*");
        corsConfig.addAllowedMethod("*");
        corsConfig.setMaxAge(3600L);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 仅对/api/auth下的所有接口生效
        source.registerCorsConfiguration("/api/auth/**", corsConfig);
        return new CorsFilter(source);
    }
}

配置说明

  1. 在application-dev.yml中激活开发环境:
    spring:
      profiles:
        active: dev
    
  2. 生产环境无需修改任何配置,只要不激活dev profile,该CORS配置就不会被加载,完全符合同源场景下的安全要求。

方案二:基于配置属性的控制器注解动态切换

如果偏好直接在控制器上使用@CrossOrigin,可以通过Spring的属性占位符实现环境动态切换:

  1. 在控制器类上添加带占位符的注解:

    @RestController
    @RequestMapping("/api/auth")
    @CrossOrigin(
        origins = "${cors.auth.origins}",
        maxAge = "${cors.auth.max-age:3600}"
    )
    public class AuthController {
        // 接口实现
    }
    
  2. 在application-dev.yml中配置开发环境的CORS规则:

    cors:
      auth:
        origins: "*"
    
  3. 在application-prod.yml中配置生产环境的同源规则(或直接不配置,让origins为空,此时@CrossOrigin不会生效):

    cors:
      auth:
        origins: "https://your-production-domain.com"
    

注意事项

这种方式需要确保生产环境的origins配置为前端同源地址,或者留空(部分Spring版本中,空值会导致CORS规则不生效),相比方案一,全局配置的方式更直观且安全,避免因配置疏漏导致生产环境暴露不必要的CORS规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:07:39