【问题标题】:Angular interceptor to set header authorization causes error in return of api设置标头授权的 Angular 拦截器导致返回 api 错误
【发布时间】:2016-03-08 09:09:31
【问题描述】:

我已经创建了一个拦截器来设置头部授权:

.config(['$httpProvider', function($httpProvider) {
    var httpAuthInterceptor = [ 'AuthStateService', function(AuthStateService) {
      return {
        'request': function(config) {
          var user = AuthStateService.getCurrentUser();
          var token = AuthStateService._getToken();
          if (token) {
            config.headers['Authorization'] = 'Basic' + user + ':' + token;
          }
          return config || $q.when(config);
        }
      };
    }];

    $httpProvider.interceptors.push(httpAuthInterceptor);
}]);

所以,当我调用下面的服务时,服务(数据)的返回是OK 3次(OKOKOK)。

.factory("connectAPI", ['$http', 'config', 'loginAPI', function($http, config, loginAPI){
  var _connect = function(callBack){
    var param = {
        user: loginAPI.getUser(),
        pass: loginAPI.getPass()
      };

    $http.get(config.baseUrl + 'connect/user/' + param.user + '/pass/' + param.pass)
      .success(function(data){
        callBack(data);
      })
      .error(function(data, status, headers, config){
        console.log(data, status, headers, config);
      });
  };

  return {
    connect: _connect
  };
}])

我的api方法:

@Path("user/{user}/pass/{pass}")
@GET
@Produces({ MediaType.APPLICATION_JSON  + ";charset=utf-8"})
public String getUserData(@PathParam("user") String user, @PathParam("pass") String pass) {
  if (user != "" && pass != ""){
    //test
    return "OK"
  }
  return "NOK"
}

我已经检查过了,api方法调用了3次。我不知道发生了什么。

当我注释标题授权行时,api 方法只调用了 1 次。怎么了?

.config(['$httpProvider', function($httpProvider) {
    var httpAuthInterceptor = [ 'AuthStateService', function(AuthStateService) {
      return {
        'request': function(config) {
          var user = AuthStateService.getCurrentUser();
          var token = AuthStateService._getToken();
          //if (token) {
          //  config.headers['Authorization'] = 'Basic' + user + ':' + token;
          //}
          return config || $q.when(config);
        }
      };
    }];

    $httpProvider.interceptors.push(httpAuthInterceptor);
}]);

【问题讨论】:

  • "只调用一行"是什么意思?为什么返回的是字符串而不是 JSON?
  • 使用回调而不是返回承诺会使您的代码难以分析。考虑从 Promise 的 .then 方法返回 Promise 和链接。您将获得相同的功能以及可以避免种族条件的额外好处。
  • 嗨,Georgeawg,这只是一个测试。我真的不认为因为我使用了回调而不是承诺是问题的关键。

标签: java angularjs jersey authorization angular-http-interceptors


【解决方案1】:

我意识到这是我的 web.xml 中的一个问题,我无意中复制了我的过滤器。

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2019-01-14
    • 2017-11-23
    相关资源
    最近更新 更多