Продолжайте получать 403 запрещено из кода примера весенней загрузки - PullRequest
1 голос
/ 08 октября 2019

Я следовал простому учебнику для новичка по весенней загрузке и настройке моего первого контроллера и нескольких вызовов API. Тем не менее, я смог вызвать GET, но POST всегда дает мне код ошибки 403 от почтальона и curl.

Вот мой соответствующий код

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("*"));
        configuration.setAllowCredentials(true);
        configuration.setAllowedHeaders(Arrays.asList("Access-Control-Allow-Headers","Access-Control-Allow-Origin","Access-Control-Request-Method", "Access-Control-Request-Headers","Origin","Cache-Control", "Content-Type", "Authorization"));
        configuration.setAllowedMethods(Arrays.asList("DELETE", "GET", "POST", "PATCH", "PUT"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }

Вот мой код контроллера

@ApiOperation(value = "Create a new order")
    @RequestMapping(value = "/orders", method = RequestMethod.POST, produces = "application/json")
    @ResponseStatus(HttpStatus.CREATED)
    public Order createOrder(
            @ApiParam(value = "New order object", required = true)
            @RequestBody Order newOrder) {
        newOrder.setSymbol(newOrder.getSymbol().toUpperCase());
        return orderRepository.save(newOrder);
    }

Вот http-ответ:

{
    "timestamp": "2019-10-08T19:57:03.487+0000",
    "status": 403,
    "error": "Forbidden",
    "message": "Forbidden",
    "path": "/api/v1/orders"
}

Iя запрашиваю с curl как таковой

curl --location --request POST "http://localhost:8080/api/v1/orders --data "test"

Я знаю, это не проблема CORS, я пробовал несколько других методов аутентификации, и все они дают 403 (не 401)

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Вы должны дать разрешение всем на этот URL:

   http
      .csrf().disable()
       and().
         authorizeRequests().
         antMatchers("/api/v1/orders").permitAll();

Я не знаю, действительно ли вам нужно отключить CORS. Если вы этого не сделаете, удалите строку cors.disable()

1 голос
/ 09 октября 2019

Вы можете попробовать посмотреть на параметр CSRF.

HttpSecurity POST 403 Запрещено

@Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .csrf().disable();
  }
...