【发布时间】:2019-09-18 20:48:36
【问题描述】:
我正在阅读来自Spring.io sight 的 Spring Boot 和 Angular 文章。登录页面部分,添加注销部分。我在配置 CRSF 时遇到问题。他们写这个
最后一个选择是最好的,因为 Angular 已经内置了对基于 cookie 的 CSRF(它称之为“XSRF”)的支持。
但在 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
对于应用程序的 Angular 部分,然后在发送请求时像这样设置 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 令牌。
【问题讨论】:
-
看起来像 JavaScript,而不是 Java
标签: java angular typescript spring-boot csrf