我正在尝试使用跨域,我已经在服务器端添加了过滤器以使CORS与AngularJS一起工作。我使用Spring作为中间件,使用AngularJS 1.3.16作为前端。
下面是我的获取请求代码,它指向不同域的api。
var deferred = $q.defer();
$rootScope.url = '/api/v1/agent/user/current/monitors';
console.log('URL: '+$rootScope.url);
$http.defaults.useXDomain = true;
delete $http.defaults.headers.common['X-Requested-With'];
console.log('GET-ing: ' + $rootScope.baseurl+$rootScope.url);
$http.get($rootScope.baseurl+$rootScope.url)
.success(function(data) {
$scope.myMonitors = data;
deferred.resolve($scope.myMonitors);
}).error(function(data) {
console.log('error');
});
而且我也在使用拦截器来实现这个Cors请求。
下面是我的拦截器,
var sessionInjector = {
request: function(config) {
console.log('Inside SessionInjector is called: ');
/* Encryption and authorization calculation*/
var methods = config.method;
var url = $rootScope.url;
console.log('--------url: ' + url);
var planetext = methods+url+"application/json"+dateString;
console.log('--------Plain-Text: ' + planetext);
var encryptText = CryptoJS.HmacSHA256(planetext, $rootScope.authToken);
$rootScope.encryptText = encryptText;
console.log('EncryptText: ' + $rootScope.encryptText);
/* End of auth calculation*/
//config.url = $rootScope.baseurl+$rootScope.url;
config.headers['x-auth-timestamp'] = dateString;
config.headers['x-auth-timestamp_format'] = "yyyy-MM-dd HH:mm:ss.S";
config.headers['x-auth-client-id'] = "admin";
config.headers['Authorization'] = $rootScope.encryptText;
console.log('config: ' + config);
return config;
}
};
当我在执行GET请求时,它给了我500个内部服务器错误,并且标头中的请求方法实际上作为OPTIONS传递。 如果GET或POST请求,我的拦截器将工作并放置自定义标头。我希望每当我发出GET请求时,请求方法都作为GET而不是OPTIONS传递。
我做了很多研究,但没有帮助。任何帮助将不胜感激。