Javascript 如何获得头授权

Javascript 如何获得头授权,javascript,spring-boot,angular7,bearer-token,Javascript,Spring Boot,Angular7,Bearer Token,我不知道为什么我不能像在Postman(从服务器返回)中看到的那样从头授权中获取值 我尝试了很多方法,但不知道为什么仍然得到空值 这是我的密码: authentication-service.ts login(u: User): Observable<HttpResponse<Response>> { if ((u.username && u.password)) { this.user.setUsername(u.username); th

我不知道为什么我不能像在Postman(从服务器返回)中看到的那样从头授权中获取值

我尝试了很多方法,但不知道为什么仍然得到空值

这是我的密码:

authentication-service.ts

login(u: User): Observable<HttpResponse<Response>> {

if ((u.username && u.password)) {
  this.user.setUsername(u.username);
  this.user.setPassword(u.password);
  // @ts-ignore
  const request = this.http.post<Response>(this.authUrl, this.user, {observe: 'response'}  )
    .pipe(
      tap((data: any) => {
        // @ts-ignore
        this.log(`Succès ${data.status} authentification succès`, 'success');
        this.navigateToCollection();
        console.log('data');
        console.log(data);
        console.log('data.headers.get(Authorization)');
        console.log(data.headers.get('Authorization'));
        return localStorage.setItem(TOKEN_KEY, data.headers.get('Authorization'));
      }),
      catchError(this.handleError<any>('login',
        console.log('je passe ici3')))
    );
  request.subscribe(value => {
     // console.log(value.headers.get('Authorization'));
     console.log(localStorage.getItem(TOKEN_KEY));
  });
  this.presentLoading(request);

  console.log('je passe ici4');
  return request;
} else {
  this.log('Renseignez les champs', 'error');
  alert('Erreur de login ou de mot de passe');
}
登录(u:用户):可观察{
如果((u.username和u.password)){
this.user.setUsername(u.username);
this.user.setPassword(u.password);
//@ts忽略
const request=this.http.post(this.authUrl,this.user,{observe:'response'})
.烟斗(
点击((数据:任意)=>{
//@ts忽略
这个.log(`success${data.status}authentication success`,success');
这个.navigateToCollection();
console.log(“数据”);
控制台日志(数据);
console.log('data.headers.get(Authorization)');
log(data.headers.get('Authorization');
返回localStorage.setItem(TOKEN_KEY,data.headers.get('Authorization');
}),
catchError(this.handleError('login'),
console.log('je passe ici3'))
);
请求。订阅(值=>{
//log(value.headers.get('Authorization');
log(localStorage.getItem(TOKEN_KEY));
});
本文件。当前加载(请求);
控制台日志('je passe ici4');
返回请求;
}否则{
this.log('Renseignez les champs','error');
警报('Erreur de login ou de mot de passe');
}
}

我的令牌由我的服务身份验证(spring boot)发送,如果您需要更多信息,请询问我

我想知道如何获得这个标题值


感谢您抽出时间。

您必须从后端(服务器)公开标题或将其传递到响应正文中

访问控制暴露头:headerName; 在springBoot应用程序中添加以下代码:

response.setHeader("Access-Control-Expose-Headers", "Authorization");

否则,您将获得空值,但您将能够在POSTMAN中看到它。

我解决了我的问题,我正在使用gateway,但您可以将其放在“配置”方法下面


您无法从数据中获取授权标头。
数据
标头
在两个不同的对象中可用。“授权标头在响应中不是标准的,因此服务器必须显式通知以公开它。为此,服务器必须添加以下标头:访问控制公开标头:授权”来源:或者您可能必须在服务器端执行此操作:
response.addHeader(“访问控制公开头”,“授权”)您是否向其他域发出请求?如果是,则是CORS请求,您必须在响应中添加上述标题。此答案与评论中提到的解决方案有何不同?您好,我正在编辑答案。没有看到您已经添加了评论。:)在返回响应之前,在控制器类中添加上述行。或使用ResponseEntity。你可以参考这个链接解决了,我改变了我的CORS过滤器的现代方法建立在这里:它现在工作
 @Bean
CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("*"));
    configuration.setAllowedMethods(Arrays.asList("GET","POST", "PUT", "DELETE", "OPTIONS"));
    configuration.setAllowedHeaders(Arrays.asList("authorization",  "content-type"));
    configuration.setExposedHeaders(Arrays.asList("authorization"));
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}