Я использую Spring Boot и Angular из Spring.io sight . Раздел Страница входа в систему, часть с добавлением выхода . У меня проблема с настройкой CRSF. Они пишут это
Последний вариант является лучшим, потому что Angular имеет встроенную поддержку CSRF (которую он называет «XSRF») на основе файлов cookie.
но похоже, что это не так в Angular 7 (в статье они используют angular 4). Потому что, когда я установил точку останова в CsrfFilter, метод doFilterInternal возвращает мне нулевой токен CRSF, и ответ браузера равен
{"timestamp":"2019-04-30T08:15:16.593+0000","status":403,"error":"Forbidden","message":"Forbidden","path":"/api/logout"}
Я пытался добавить
HttpXsrfTokenExtractor
для угловой части приложения, а затем при отправке запроса установить X-XSRF-TOKEN примерно так
const token = this.tokenExtractor.getToken();
this.httpClient.post('api/logout', {}, {headers: new HttpHeaders().set('X-XSRF-TOKEN', token)}).pipe(finalize(() => {
this.userService.user.authenticated = false;
this.userService.user.name = '';
this.router.navigateByUrl('login');
})).subscribe();
Но я получаю эту ошибку
ERROR TypeError: Cannot read property 'length' of null
at HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.applyUpdate (http.js:241)
at http.js:212
at Array.forEach (<anonymous>)
at HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.init (http.js:212)
at HttpHeaders.push../node_modules/@angular/common/fesm5/http.js.HttpHeaders.forEach (http.js:277)
at Observable._subscribe (http.js:1529)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe (Observable.js:43)
at Observable.push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe (Observable.js:29)
at subscribeTo.js:21
at subscribeToResult (subscribeToResult.js:11)
и я не очень то понял.
Я ожидаю, что смогу выйти из системы, и CsrfFilter.class покажет мне настоящий токен CSRF.