CORS мешает мне делать вызовы API - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть приложение, работающее в двух док-контейнерах: фронтэнде (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 в свое приложение. Также в логах контейнера не отображаются ошибки.

Любая помощь или понимание этого будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Это сработало для меня в моем регионе.

    @CrossOrigin(origins = "http://frontend:3000")
    @GetMapping(value = "/address/create")
    public ResponseEntity<String> getNewAddress() {
      ...}
0 голосов
/ 08 сентября 2018

Я делал это раньше, можешь попробовать?В отличие от ваших попыток, я добавил exposedHeaders().

@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/blockchain/**")
                .allowedOrigins("http://frontend:3000")
                .allowedHeaders("*")
                .allowedMethods("*")
                .exposedHeaders("Access-Control-Allow-Headers",
                        "Access-Control-Allow-Origin, Origin, Accept, X-Requested-With, " +
                                "Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers")
                .maxAge(3600);
    }
}

U, которые не могут удалять ненужные заголовки, что написано в методе exposeHeaders.Так что ваша проблема в том, чтобы не выставлять "Access-Control-Allow-Origin".Вы можете использовать только это или более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...