3
respostas

Não passar o header para o servidor

Tenho este código no angular:

    import { RequestOptions, Headers } from '@angular/http';

    const createDefaultHeaders = function() {
      let token = 'Bearer ' + localStorage.getItem('token');
      let headers = new Headers(
      //  { 'Content-Type': 'application/json', 'Authorization': localStorage.getItem('token') }

        {
          'Content-Type': 'application/json', 
          'Authorization': localStorage.getItem('token'),
          'Accept': 'application/json',
          'Access-Control-Allow-Origin': '*',
          'Access-Control-Allow-Credentials': 'true'
        }

      );
      let options = new RequestOptions({ headers: this.headers });
      return options;
    };

    export const REQUEST_OPTIONS_DEFAULT: Function = createDefaultHeaders;

Código java com spring

String requestHeader = null;
            System.out.println("O header é nulo? "
                    + request.getHeader("Authorization") == null);
            if (request.getHeader("Authorization") != null) {
                System.out.println("O que tem dentro do header? "
                        + request.getHeader("Authorization"));
                requestHeader = "Bearer " + request.getHeader("Authorization");
            }

            logger.debug("Autenticação de processamento para '{}'",
                    request.getRequestURL());

A variável requestHeader sempre fica nulo.

Tem um tempo que estou fazendo com mock, mas não consegui resolver.

3 respostas

Olá, Guilherme.

Não achei nenhum erro no seu código FrontEnd e pedi para outro instrutor (Lucas Félix) de Java Spring da vida, ele também não achou nenhum erro.

A único ponto estranho no seu código FrontEnd é que você tem duas linhas pegando o token de forma diferente do seu localStorage.

Primeiro você criou uma variável chamada token e colocou um prefixo nela:

let token = 'Bearer ' + localStorage.getItem('token');

Depois no JSON que você passa no header você volta a pegar o token que está no seu localStorage:

'Authorization': localStorage.getItem('token'),

Será que você está recebendo como não autorizado porque você deveria usar a variável token no valor da chave Authorization?

Oi Guilherme, tudo bem?

Pra mim tá bem claro o status code, está unauthorized, vc tá usando spring security por de trás dos panos aí?

Uma coisa q vc pode fazer é oq o Marco falou, coloca o Bearer antes do token.

const createDefaultHeaders = function() {
      let token = 'Bearer ' + localStorage.getItem('token');
      let headers = new Headers(
      //  { 'Content-Type': 'application/json', 'Authorization': localStorage.getItem('token') }

        {
          'Content-Type': 'application/json', 
          'Authorization': token,
          'Accept': 'application/json',
          'Access-Control-Allow-Origin': '*',
          'Access-Control-Allow-Credentials': 'true'
        }

      );
      let options = new RequestOptions({ headers: this.headers });
      return options;
    };

Fica assim seu código.

Abraço!

Fiz o que disse Yuri e Marco e não funcionou.

Sim é Spring Secutiry.

Deve estar undefinid mesmo