【发布时间】:2020-10-08 22:34:04
【问题描述】:
我是角度和弹簧安全的新手。我在从 Angular 更新数据时遇到问题,但我可以在测试我的 api 时使用失眠更新它(我在标头中传递令牌)。
我将令牌传递给 put 方法,但我得到拒绝访问 403
这是我在角度服务中的功能
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));
}
这是我在 spring 控制器中的后端功能
@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 方法,我会拒绝访问
【问题讨论】:
-
可能由于CORS preflight而被阻止,您可以尝试先在Access-Control-Allow-Methods中添加OPTIONS:response.addHeader("Access-Control-Allow-Methods", "GET, POST , 放置, 删除, 补丁, 选项"); - 如果您使用响应标题编辑问题会很有用
-
看起来像是 Spring 安全性的 XSRF 保护。
标签: angular spring-boot rest http spring-security