Конфигурация Spring Security CORS не работает после развертывания в App EngineJAVA

Программисты JAVA общаются здесь
Anonymous
Конфигурация Spring Security CORS не работает после развертывания в App Engine

Сообщение Anonymous »

После настройки параметров CORS в моем приложении Spring Boot, чтобы разрешать только запросы, поступающие с моего веб-сайта, я столкнулся с неожиданным поведением при развертывании приложения в App Engine. Несмотря на успешное локальное тестирование, в ходе которого конфигурация работала должным образом, после развертывания API остается доступным из любого источника.
Ниже приведен мой класс конфигурации безопасности Spring:

Код: Выделить всё

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(authorize -> authorize.anyRequest().permitAll())  // Allow all requests
.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 saveCar(@RequestBody Car car) {
return carService.saveCar(car);
}

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

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

@GetMapping("/city/{city}")
public Flux findCarsByCity(@PathVariable String city) {
return carService.findCarsByCity(city);
}
}
Файл app.yml, используемый App Engine для развертывания API:

Код: Выделить всё

runtime: java17
instance_class: F1
Я обнаружил, что могу настроить CORS в своем файле app.yml, но предпочел оставить эту заботу, чтобы безопасность Spring справилась с этим.
Дополнительные журналы:
  • Заголовки запросов:
    [img]https:/ /i.stack.imgur.com/s453V.png[/img]
  • Заголовки ответов:
    Изображение


Подробнее здесь: https://stackoverflow.com/questions/782 ... app-engine

Вернуться в «JAVA»