0

的回报,我已经创建了一个拦截器来设置首标授权:角拦截器来设置首标授权导致错误在API

.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); 
}]); 
+0

*“只调用一行”*是什么意思?为什么字符串被返回而不是JSON? – charlietfl

+0

使用回调而不是返回承诺会使您的代码难以分析。考虑从承诺的'.then'方法返回承诺和链接。您将获得相同的功能,并且可以避免种族竞争。 – georgeawg

+0

嗨,Georgeawg,这只是一个测试。我真的不认为,因为我已经使用回调而不是承诺是问题的关键。 – shibata

回答

0

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