2016-09-09 4 views
0

Ich habe eine Reihe von Fragen durchsucht, die meinen ähneln, aber keine der Lösungen, die ich versucht habe, scheint zu funktionieren.AngularJs: Ich kann die vom Server gesendeten Cookies nicht lesen

Ich habe einen Jersey2.0 REST-Dienst, der der Antwort einen Cookie hinzufügt und ihn an eine Angularjs-Front-End-Anwendung zurückgibt. Ich habe das Setup bereits korrekt durchgeführt (Access-Control-Allow-Credentials = true, kein Platzhalter in Access-Control-Allow-Origin, etc ..).

Ich mache es durch Hinzufügen einer „Set-Cookie“ Header auf die Antwort wie folgt:

MultivaluedMap<String, Object> headers = responseContext.getHeaders(); 
headers.add("SET-COOKIE", new NewCookie(cookieName, cookieValue); 

Dies funktioniert, und ich kann sehen, das Cookie in der Antwort des jeweiligen REST-Service-Aufruf zurückgegeben wird zu dieser bestimmte REST-Endpunkt. Was ich meine, ist, dass ich in der Chrome-Entwicklerkonsole auf der Registerkarte "Netzwerk" auf die Anfrage klicken kann, die den Cookie zurückgeben soll, und auf den Tabs "Cookies" und "Header" kann ich den zurückgegebenen Cookie sehen die Antwort. Wenn ich eine weitere Anfrage an den Endpunkt mache, wird dieser Cookie jetzt in der Anfrage gesendet und ich kann ihn auf dem Jersey-Server erfassen.

Großartig. Das Problem besteht darin, dass der Cookie nicht auf der Registerkarte "Ressourcen" angezeigt wird. Wenn ich auf den Tab "Ressourcen" klicke, wähle links die Dropdown-Liste "Cookies" und wähle dann "localhost". Der Cookie, den ich in der Antwort senden möchte, ist nicht vorhanden. Ich nehme an, das ist auch der Grund, warum ich, wenn ich versuche, den Cookie in meiner AngularJs-Anwendung über $cookies.get('cookieId'); mit ngCookies zu bekommen, undefiniert werde.

Auch für den Fall, jemand erwähnt es in einer Antwort/Kommentare, ich bin mir ziemlich sicher, dass das Problem hier nicht HttpOnly ist. Mein JSESSIONID-Cookie wird zurückgegeben, und ich kann es auf dem Tab "Ressourcen" sehen, wobei das Http-Feld auf HttpOnly gesetzt ist.

Ich dachte, vielleicht, weil ich in einer Unternehmensumgebung bin, lassen sie mich nicht Cookies hinzufügen, aber ich kann dies auf der Angular Frontend über $Cookies.put('cookieId', 'cookieValue'); tun und es zeigt nur auf der Registerkarte "Ressourcen" fein.

Irgendwelche Hilfe, warum meine Cookies nicht vom Server hinzugefügt werden?

Antwort

1

Nachdem ich ein paar mehr stackoverflow-Fragen zu meinem Original durchforstet habe, habe ich durch this stackoverflow question herausgefunden, dass Cookies, die auf einer Domain erstellt wurden, nicht auf einer anderen Domain mit Javascript erreichbar sind.

Ich werde eine Workaround dafür haben, aber meine ursprüngliche Frage wurde beantwortet, so dass dies als beantwortet markiert.

0

Für Ihren Fall ist es einfach zu lösen, wenn Sie nur den Pfad des Cookies, z.

Cookie myCookie = new Cookie("Name_of_cookie", "String_value_of_cookie") 
myCookie.setPath("/the domain Js is using ") 

Oder lass es einfach als / für die Hauptdomäne, die höchstwahrscheinlich Js eingesetzt wird.

Verwandte Themen