Извините за еще один вопрос об Угловом и CORS, но я просто не могу определить, где находится проблема. Моя базовая настройка - это простой угловой автономный веб-сайт, поэтому нет Express или любого серверного компонента, который говорит о Java-API на другом сервере. API построен с использованием JAX-RS и живет на сервере приложений JBoss 7.1.3. У меня есть доступ к коду как для угловой, так и для java.AngularJS CORS с заголовком авторизации
С API-интерфейсом CORS разрешен с использованием популярного фильтра трансляции CORS, показанного ниже.
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE, OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Origin, Accept, Content-Type, X-Requested-With, Cookie,content-type</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Путем API работает, обеспечивая имя пользователя и пароль для доступа к конечной точке, которая возвращает маркер, этот маркер затем включаются в заголовке авторизации в каждом последующем запросе. Первая часть процесса работает нормально, я могу предоставить действительные учетные данные и получить токен, но затем любой последующий запрос никогда не работает. Таким образом, в моем Угловом сервисе у меня есть следующий метод входа, который извлекает мне токен, а затем пытается получить текущего зарегистрированного пользователя.
login: function(username, password){
var deferred = $q.defer();
$http({
method: 'POST',
url: 'http://localhost:8080/website-api/rest/account/token',
headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'},
transformRequest: function(obj) {
var str = [];
for(var p in obj){
str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
}
return str.join('&');
},
data: {username: username, password: password }
})
.success(function(token) {
$log.info(token.jwt);
var requestConfig = {
headers: {
'Authorization': token.jwt,
'Accept': 'application/json',
'X-Testing': 'Testing'
}
};
$http.get('http://localhost:8080/website-api/rest/users/current', requestConfig)
.success(function(user) {
$log.info('Retrieved User');
user.sessionToken = token.jwt;
deferred.resolve(user);
})
.error(function(data, status, headers, config) {
$log.info(data);
$log.info(status);
$log.info(headers);
$log.info(config);
});
})
.error(function(data, status, headers, config) {
$log.info(data);
$log.info(status);
$log.info(headers);
$log.info(config);
});
return deferred.promise;
}
Первый запрос работает отлично, второй завершается с ошибкой:
XMLHttpRequest cannot load http://localhost:8080/website-api/rest/users/current. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.
Я не могу понять, если установка фильтра CORS на API является причиной моей проблемы или что-то я не делаю правильно, отправляя запрос от Angular. Я подозреваю, что это угловой, потому что я могу использовать сторонние службы Postman и Hurl.it для тестирования конечных точек API, и они возвращают объект пользователя по назначению.
Любая помощь будет очень признательна!