У меня есть приложение, работающее в двух док-контейнерах: фронтэнде (act.js) и бэкэнде (java, spring).
Я установил и запустил контейнеры и могу проверить, могут ли они взаимодействовать друг с другом с помощью ping.
Заметив эту проблему, я изучил ее и нашел на здесь вопрос о том, что пользователь gok
предоставил некоторую полезную информацию и ссылку на spring docs , которая была очень информативной. .
Я применил изменения к своему бэкэнд-коду, как мне было приказано сделать это в более раннем вопросе , прежде чем выяснить, что это проблема CORS.
Итак, прочитав весенние документы, я применил к своим занятиям следующее
Config
@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/blockchain/**")
.allowedOrigins("http://frontend:3000")
.allowedHeaders("*")
.allowedMethods("*")
.maxAge(3600);
}
}
Примечание Я пробовал отображать имя localhost
и frontend
(имя контейнера), ни один не работал
Контроллер
@RestController
@RequestMapping(value = "/api/blockchain")
public class BlockchainController {
@CrossOrigin
@GetMapping(value = "/address/create")
public ResponseEntity<String> getNewAddress() {
String newAddress = blockchainService.getNewAddress();
if (StringUtils.isNotBlank(newAddress)) {
return new ResponseEntity<String>(newAddress, HttpStatus.OK);
}
return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
}
Примечание Прежде чем спросить, есть еще что-то для класса контроллера, я включил только то, что было необходимо.
Ошибка консоли
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://multichain-api:8080/api/blockchain/address/create. (Reason: CORS request did not succeed).
Эта ошибка появлялась всегда и не менялась, так как я включил конфигурацию cors в свое приложение. Также в логах контейнера не отображаются ошибки.
Любая помощь или понимание этого будет высоко ценится.