У меня есть два проекта A и B. Оба работают на разных портах A(8080) B(8091). Я включил cors origin(http://localhost:8090)
в проекте A для конечной точки «приветствие». Затем пытаемся вызвать конечную точку «приветствие» из проекта B, используя resttemplate
. Поскольку перекрестное происхождение в проекте A и вызывающий проект B находятся на разных портах, я ожидаю ошибки, связанной с cors.
Но я получаю правильный ответ вместо ошибки.
Я пробовал в хроме и почтальоне, но тот же результат
//Project A
@RestController
public class GreetingController {
@GetMapping("/greeting")
@CrossOrigin(origins = "https://localhost:8090")
public String greeting() {
return "greetingsss";
}
}
//Project B
@RestController
public class GreetingController {
@GetMapping("/greeting1")
public String greeting() {
final String uri = "http://localhost:8080/greeting";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(uri, String.class);
return result;
}
}
Ожидаемый результат: не удалось загрузить, нет контроля доступа, разрешающего источник
Фактический результат: приветссс
🤔 А знаете ли вы, что...
В Java существует механизм сборки мусора, который автоматически удаляет неиспользуемые объекты, что упрощает управление памятью.
CORS - это веб-вещь, навязанная пользовательскими агентами (браузерами). Следовательно, это не повлияет на связь между службами. Если вы хотите добиться этого для связи между службами, используйте Spring Security, где вы можете перехватывать URL-адреса, сопоставляя определенные шаблоны и проверяя множество вещей, включая исходный IP-адрес/домен (hasIpAddress). Здесь вы можете запретить доступ или разрешить доступ, используя различные правила.
В качестве альтернативы вы можете написать фильтр безопасности, чтобы запретить/разрешить определенные IP/домены.