2017-02-01 4 views
0

Als ich versuchte, eine GET-Anfrage an Activiti REST URL zu senden, mit POSTMAN und einem Autorisierungsparameter (kermit: kermit) funktioniert es wie ein Charme.Activiti REST gibt 401 nach GET-Anfrage zurück

Aber wenn ich versuchte, das Gleiche zu tun, nur mit kantigem $ HTTP-Dienst, gibt es die folgenden Fehler:

XMLHttpRequest cannot load http://localhost:8080/activiti-rest/service/repository/deployments . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:8081 ' is therefore not allowed access. The response had HTTP status code 401.

Hier ist mein Controller:

(function() { 
'use strict'; 

angular 
    .module('doktorat-app-test') 
    .controller('TestController', TestController); 

TestController.$inject = ['$http', '$base64']; 
function TestController($http, $base64) { 
    var tcr = this; 
    $http.defaults.headers.common['Authorization'] = 'Basic ' + $base64.encode('kermit:kermit'); 


    tcr.text = 'ssdsds'; 


    $http.get('http://localhost:8080/activiti-rest/service/repository/deployments') 
    .then(function(response){ 
     tcr.text = response.data; 
    }); 
} 

})(); 

Hat jemand begegnet auf ähnlicher Fehler? Sie haben mehr als 2 Tage damit verbracht, dieses Problem zu lösen, aber ohne Erfolg.

P.S. Ich benutze NodeJS HTTP-Server, um meine Angular App, die auf Port 8081 läuft laufen zu lassen.

+0

https://stackoverflow.com/search?q=No+Access-Control-Allow-Origin+header+is + present + on + the + requested + resource – sideshowbarker

Antwort

0

Da Sie versuchen, auf Rest API zugreifen, die auf http://localhost:8081/ von http://localhost:8080/ ist, wird Browser überprüfen, ob Ihr Server CORS mit Preflight-Anfrage implementieren. Sie können weitere Details CORS auf unter URL erhalten:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Normalerweise Anwendung in einem Server gehostet wird nicht über die Ressourcen erlaubt sein in anderer sever.This Einschränkung gehostet auf dem Zugang aller meisten alle Browser implementiert ist jetzt einen Tag.

Um zu funktionieren, muss Ihr Rest-API-Server mitteilen, dass einige andere Server auch anrufen dürfen. Dazu müssen Sie den CORS-Filer in Ihrem Rest-API-Server implementieren.

Da Sie nicht angeben, die Langauge Sie in REST verwenden, ich bin Bereitstellung einer Open-Source-CORS Filterbibliothek für JAVA:

http://software.dzhuvinov.com/cors-filter.html

, die Ihr Problem löst.

+0

Vielen Dank für Ihren Kommentar, es gab mir eine Idee, wie ich mein Problem lösen kann. Da activiti REST läuft auf localhost: 8080 Tomcat und seine in seinem Webapps-Ordner, speicherte ich meine eckige App auch im Webapps-Ordner und löste mein Problem. Es ist keine elegante Lösung, aber in meinem Fall muss es einfach funktionieren. Prost. – Martel

0

Damit CORS für eine bestimmte Domäne Sie eine Middleware, wie unten verwenden:

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "http://localhost:8081"); 
    res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); 
    res.header("Access-Control-Allow-Credentials", "true"); 
    res.header("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization, X-Requested-With"); 
    next(); 
}); 
Verwandte Themen