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

部署至App Engine后Spring Security CORS配置失效求助

Spring Security CORS配置在App Engine部署后失效,API允许任意源访问

我在Spring Boot应用中通过Spring Security配置CORS规则,仅允许http://mywebsite.com和https://mywebsite.com这两个源的请求访问API。本地测试时该配置正常生效,但部署到Google App Engine后,API仍能被任意源访问,不符合预期。

Spring Security配置类

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
    @Bean
    public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
        http.csrf(AbstractHttpConfigurer::disable)
                .authorizeHttpRequests(authorize -> authorize.anyRequest().permitAll())  // 允许所有请求
                .httpBasic(Customizer.withDefaults())
                .cors(httpSecurityCorsConfigurer -> httpSecurityCorsConfigurer.configurationSource(corsConfigurationSource()))
                .sessionManagement(sessionManagement -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
        return http.build();
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(List.of("http://mywebsite.com","https://mywebsite.com"));
        configuration.setAllowedHeaders(Arrays.asList("Access-Control-Allow-Origin", "Origin"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST","DELETE","PUT"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

控制器代码

@RestController
@RequestMapping("/cars")
public class CarController {

    private final CarService carService;

    public CarController(CarService carService) {
        this.carService = carService;
    }

    @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Mono<Car> saveCar(@RequestBody Car car) {
        return carService.saveCar(car);
    }

    @DeleteMapping("/{carId}")
    public Mono<Void> deleteCar(@PathVariable String carId) {
        return carService.deleteCar(carId);
    }

    @GetMapping
    public Flux<Car> findAllCars() {
        return carService.findALlCars();
    }

    @GetMapping("/city/{city}")
    public Flux<Car> findCarsByCity(@PathVariable String city) {
        return carService.findCarsByCity(city);
    }
}

App Engine部署配置(app.yml)

runtime: java17
instance_class: F1

我了解可以在app.yml中配置CORS,但更希望由Spring Security来处理跨域限制问题。

附加信息

请求头信息

测试请求的Origin为非允许源https://test-website.com,同时携带Access-Control-Request-Method: GET等CORS预检请求头。

响应头信息

API返回的响应头中包含Access-Control-Allow-Origin: *,表明CORS限制未生效。

内容的提问来源于stack exchange,提问作者mr.Penguin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:47:39