Spring boot, JWT и angular не работают: ошибка кода состояния HTTP 403 для метода put - PullRequest
1 голос
/ 18 июня 2020

Я новичок в angular и пружинной безопасности. У меня проблема с обновлением моих данных из angular, но я могу обновить их, используя бессонницу, когда я тестирую свой api (я передаю токен в заголовке).

Я передаю токен методу put, но я получить отказано в доступе 403

это моя функция в angular сервисе

  private headers = new HttpHeaders({
    'Content-Type': 'application/json',
    'Authorization':  this.authService.jwt
    });
updateUserById(id: String): Observable<any> {
    console.log(this.headers);

    return this.http.put(this.host_3 + '/' + id, {headers: this.headers});
  }

это моя функция в контроллере компонентов

onSubmit(){
   this.updateCustomer();
  }
  updateCustomer(){
    console.log("inside update"+this.userr);
    this.coordservice.updateUserById(this.userr).
    subscribe(data => console.log("data"+data), error => console.log(error));
  }

это моя бэкэнд-функция в пружинный контроллер

 @PutMapping(value = "/customersList/updateCustomer/{idCustomer}")
    public ResponseEntity<Customer> update(@PathVariable(name = "idCustomer") String idCustomer, @RequestBody Customer customer){
        this.customerService.updateCustomer(idCustomer,customer);
        return new ResponseEntity<Customer>(customer, HttpStatus.NO_CONTENT);
    }

Конфигурация безопасности

rotected void doFilterInternal(HttpServletRequest request,HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {


        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, authorization");
        response.addHeader("Access-Control-Expose-Headers", "Access-Control-Allow-Origin, Access-Control-Allow-Credentials, authorization");
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, PATCH");

Примечание: я могу получить данные с помощью http.get (), но для метода put я получаю отказ в доступе

1 Ответ

0 голосов
/ 19 июня 2020

Вам также может потребоваться добавить методы OPTIONS в качестве разрешенного метода, как показано ниже

response.addHeader("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE, PATCH");

Для CORS браузер отправит запрос OPTIONS, чтобы убедиться, что он делает запрос. для исправления сервера (известные как предварительные запросы), если на него будет получен успешный ответ, инициируется фактический запрос.


Токен CSRF также играет важную роль в безопасности. Возможно, вам придется настроить его в соответствии с вашими требованиями

Чтобы отключить, вы можете использовать .csrf().disable() как показано ниже

@Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/public-api-such-as-login").permitAll() 
            .anyRequest().authenticated();
    }

Если вы хотите включить CSRF, вы можете использовать CookieCsrfTokenRepository следующим образом . Вы также можете изучить , как это работает

http
            .csrf()
            .ignoringAntMatchers("endpoint-to-be-ignored-for-csrf")
            .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
            .and()
            .authorizeRequests()
            .antMatchers("/public-api-such-as-login").permitAll() 
            .anyRequest().authenticated();   
...