«cors header‘ access-control-allow-origin ’missing» отклоняет запрос, даже если origin разрешен - PullRequest
0 голосов
/ 24 мая 2019

Я хочу отправить запрос POST из моего углового приложения на мой сервер (написанный с использованием Spring-Boot). Запрос отклоняется сообщением "отсутствует заголовок cors‘ access-control-allow-origin ".

Я включил источник моего углового приложения "http://localhost:4200", как я сделал для других моих RestControllers (который работает). Единственное отличие, насколько я могу судить, состоит в том, что я обрабатываю POST-запросы в моем не работающем контроллере .

Контроллер

@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class Controller {

    @Autowired
    private ReqRepository reqRepository;

    @PostMapping("/reqs")
    public Req saveReq (@Valid @RequestBody Req req) {
        return reqRepository.save(req);
    }
}

Репозиторий

@Repository
public interface ReqRepository extends JpaRepository<Req, Long> {
}

Угловой сервис

@Injectable()
export class ReqService {

  private httpOptions = {
    headers: new HttpHeaders({
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json'
    })
};

  constructor(private http: HttpClient) {}

  sendReq(req: Req): Observable<Req> {
    return this.http.post<Req>('http://localhost:8080/reqs', req, this.httpOptions);
  }
}

Я думал, что разрешения источника будет достаточно, поэтому запрос возможен, но он заблокирован. Похоже, я что-то упустил для включения запросов POST.

Обновление

Я дополнительно проверил контроллер, и он работает для запросов GET. Я просто изменяю метод, поэтому кажется, что проблема заключается в запросе POST. Ниже приведен контроллер с конечной точкой теста GET вместо конечной точки POST

@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class Controller {

    @Autowired
    private ReqRepository reqRepository;

    @GetMapping("/reqs")
    public Page<Req> testCall (Pageable pageable) {
        System.out.println("Geeting request");
        return reqRepository.findAll(pageable);
    }
}

Ответы [ 2 ]

0 голосов
/ 27 мая 2019

Проблема была в моей весенней конфигурации безопасности. Мне пришлось отключить csrf, потому что он включен по умолчанию. Я получил решение из этого поста: Как устранить ошибку 403 в Spring Boot Post Request

Мое решение выглядит так:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //Override basic security settings so no login page is needed to access the RestEndpoints
    @Override
    protected void configure(HttpSecurity security) throws Exception
    {
        security.httpBasic().disable();
        security.csrf().disable();
    }
}
0 голосов
/ 24 мая 2019

Рад, что ваш запрос работает сейчас. Обратите внимание: 'Access-Control-Allow-Origin': '*' - заголовок, отправленный с сервера. Здесь вы пытаетесь отправить заголовок с углового на сервер, который не будет работать

Также, пожалуйста, измените @CrossOrigin(origins = "http://localhost:4200")

до @CrossOrigin(origins = "http://localhost:4200", methods="GET,POST,PUT,DELETE,ORIGIN") и посмотрите, работает ли он

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