У меня возникла проблема с конфигурацией Spring Security CORS. Я тестирую свой API локально с несколькими профилями и развернул API и приложение Angular в Cloud Run (в разных проектах GCP).
Я наблюдаю различное поведение локально и . в облаке, и я не могу понять, почему. Что происходит:
Локально: когда я тестирую Spring Boot API с моим приложением Angular, используя
прокси (proxy.dev.conf.json или proxy.prod.conf.json). ), все работает
отлично. Однако конечная точка /public/cars доступна из любого
источника, даже если я установил определенные разрешенные источники в Spring
Security.
Развертывание Cloud Run. Когда я развертываю приложение Angular и API,
Потому что оно пытается получить доступ к маршруту Angular вместо связи с API! Однако, если я получаю доступ к API напрямую из браузера
(без использования Angular), я все равно могу попасть в конечную точку /public/cars
и получить данные, даже если источник должен быть заблокирован.
Локально< /strong>: я могу получить доступ к /public/cars из любого источника, даже если я
указал разрешенные источники в Spring Security.
Cloud Run (развернуто): Приложение Angular: Приложение не может обмениваться данными с API из-за
ошибок CORS. Прямой доступ к API (через браузер): я могу перейти к развернутому API
и получайте ответы от /public/cars без проблем с CORS, даже если
источник запрещен.
Вопросы:
Почему я могу получить доступ к /public/cars из любого источника локально, хотя
Я установил разрешенные источники в Spring Security?
Почему мое приложение Angular не может взаимодействовать с API, когда оба
развернуты в Cloud Run?
Почему я могу напрямую получить доступ к API из браузера а не
через приложение Angular?
У меня возникла проблема с конфигурацией Spring Security CORS. Я тестирую свой API локально с несколькими профилями и развернул API и приложение Angular в Cloud Run (в разных проектах GCP). Я наблюдаю различное поведение локально и . в облаке, и я не могу понять, почему. [b]Что происходит:[/b] [list] [*][b]Локально[/b]: когда я тестирую Spring Boot API с моим приложением Angular, используя прокси (proxy.dev.conf.json или proxy.prod.conf.json). ), все работает отлично. Однако конечная точка /public/cars доступна из любого источника, даже если я установил определенные разрешенные источники в Spring Security.
[*][b]Развертывание Cloud Run[/b]. Когда я развертываю приложение Angular и API, Потому что оно пытается получить доступ к маршруту Angular вместо связи с API! Однако, если я получаю доступ к API напрямую из браузера (без использования Angular), я все равно могу попасть в конечную точку /public/cars и получить данные, даже если источник должен быть заблокирован.
[/list] [b]Моя конфигурация безопасности Spring:[/b] [code]@Configuration @EnableWebSecurity @Slf4j public class SecurityConfig {
{ "/api": { "target": "https://api.testcars.com", "secure": false, "changeOrigin": false, "pathRewrite": { "^/api": "" } } } [/code] [b]Что я вижу:[/b] [list] [*][b]Локально< /strong>: я могу получить доступ к /public/cars из любого источника, даже если я указал разрешенные источники в Spring Security.
[*] Cloud Run (развернуто):[/b] [b]Приложение Angular:[/b] Приложение не может обмениваться данными с API из-за ошибок CORS. [b]Прямой доступ к API (через браузер):[/b] я могу перейти к развернутому API и получайте ответы от /public/cars без проблем с CORS, даже если источник запрещен.
[/list] [b]Вопросы:[/b] [list] [*]Почему я могу получить доступ к /public/cars из любого источника локально, хотя Я установил разрешенные источники в Spring Security?
[*]Почему мое приложение Angular не может взаимодействовать с API, когда оба развернуты в Cloud Run?
[*]Почему я могу напрямую получить доступ к API из браузера а не через приложение Angular?