12 июн. 2017 г., 16:07 от Tim

 заголовок для доступа из скрипта, который сделал XHR:

ызове моей службы REST в Angular заголовки ответа отсутствуют.

Метод входа в Angular

login(username: string, password: string) {
    const credentials = { "username": username, "password": password };
    return this.http.post(this.url, credentials)
      .subscribe(
        data => console.log(data), // JSON.stringify(data.headers) also is empty
        error => console.log(error)
      );
  }

Вывод в консоль инструментов Chrome dev

Ответ {_body: "", status: 200, ok: true, statusText: "OK", headers: Headers…} headers_headers: Map (0) _normalizedNames: Map (0)прото: Objectok: truestatus: 200statusText: "OK" тип: 2url: "HTTP: // локальный: 8080 / бэкенд / отдых / Логин"_body:" "прото: Тело

Но когда я отправляю тот же почтовый запрос почтальону, я получаю ожидаемый результат:

Access-Control-Allow-Credentials →true
Access-Control-Allow-Origin →chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop
Authorization →Bearer eyJ[...]
Connection →keep-alive
Content-Length →0
Date →Mon, 12 Jun 2017 13:19:54 GMT
Server →WildFly/10
Vary →Origin
X-Powered-By →Undertow/1

ОТДЫХ

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response authenticateUser(CredentialsDTO credentialsDTO) {
    try {
        authService.login(credentialsDTO.getUsername(), credentialsDTO.getPassword());
    } catch (WrongCredentialsException e) {

        return Response.status(Status.FORBIDDEN).entity("WrongCredentialsException").build();
    } 

    // Issue token
    String token = issueToken(credentialsDTO.getUsername());

    // Return the token on the response
    return Response.ok().header(AUTHORIZATION, "Bearer " + token).build();
}

Почему я не вижу заголовки в Chrome?

ОБНОВИТЬ Я также использую CORSFilter, который позволил Javascript связаться с моим бэкэндом в первую очередь. Вот как это настроено в моем web.xml

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>

    <init-param>
        <param-name>cors.allowGenericHttpRequests</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>

    <init-param>
        <param-name>cors.allowSubdomains</param-name>
        <param-value>false</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, HEAD, POST, DELETE, OPTIONS</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportedHeaders</param-name>
        <param-value>*</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>cors.maxAge</param-name>
        <param-value>3600</param-value>
    </init-param>

</filter>

<filter-mapping>
    <!-- CORS Filter mapping -->
    <filter-name>CORS</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

Хотя я думал, что он настроен на все, но я не уверен, связано ли это с моей проблемой.

Ответы на вопрос (0)

12 июн. 2017 г., 16:15 от n00dl3

Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma

Чтобы позволить сценариям получить доступ к другим заголовкам, отправленным сервером, сервер должен отправитьAccess-Control-Expose-Headers Заголовок.

Заголовок ответа Access-Control-Expose-Headers указывает, какие заголовки могут быть представлены как часть ответа путем перечисления их имен.

например:Access-Control-Expose-Headers: Authorization, X-Foobar

Вы можете настроить свойweb.xml файл, включая это, чтобы позволитьAuthorization заголовок для доступа из скрипта, который сделал XHR:

<init-param>
  <param-name>cors.exposedHeaders</param-name>
  <par‌​am-value>Authorizati‌​on</param-value>
<ini‌​t-param>

ВАШ ОТВЕТ НА ВОПРОС