环境
springBootVersion ='2.1.0.RELEASE'
Linux:18.01 LTS
上下文
我在控制器中有当前的方法:
@PostMapping(value = "")
public ResponseEntity<String> login(@RequestBody @Valid LoginCredentials loginCredentials) {
return ResponseEntity.status(HttpStatus.OK)
.header(HttpHeaders.SET_COOKIE, "Authorization=" + "Bearer " + token)
.build();
}
我的角色配置正确
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedHeaders("*")
.allowedMethods("*")
.allowCredentials(true);
}
我也告诉邮递员,标题是正确的
仍然没有发送标头集cookie。
当我使用angular app发送请求时也会发生同样的情况
return this.http.post(this.LOGIN_URL, loginCred, {withCredentials: true});
如您所见,凭据设置为true。仍然我没有得到我的Set-cookie标头。
题
如何在前端(Angular或postman)上设置标题?
经过几个小时的搜索,我找到了主要原因。
我的frontent在localhost上运行:4200我的后端运行在localhost:8090上
当后端发送设置cookie时,谷歌浏览器会阻止它,因为cookie是由第三方域设置的。
它可以在设置>高级设置>隐私>内容设置>阻止第三方cookie和站点数据中取消激活
解决
获取前端的令牌作为响应的主体,并通过前端业务逻辑(本地存储或设置cookie)将其设置在那里