Wpis z mikrobloga

#spring #programowanie #java

Mam 2 oddzielnie serwery na backend (Spring + Spring security) oraz frontend(AngularJS). Problem mam przy wysyłaniu danych metodą POST.

Mianowicie gdy próbuje przesłać dane na backend dostaję wiadomośc od Spring

"HTTP Status 403 - Expected CSRF token not found. Has your session expired?" odpowiedź html

Oraz błąd 403 Forbiden

Zablokowano żądanie do zasobu innego pochodzenia: zasady „Same Origin Policy” nie pozwalają wczytywać zdalnych zasobów z „http://localhost:8080/registerAccount”. (brakujący nagłówek CORS „Access-Control-Allow-Origin”) ->konsola Firefox

Wczoraj cały dzień siedziałem i nie mogę zrozumieć gdzie mam błąd. W ciasteczkach XSFR-TOKEN się znajduje i wysyłany jest normalnie. Jak widać w kodzie poniżej Cors też jest skonfigurowany by miał dostępne te nagłówki.

Myślałem dodać ten nagłówek w angularze przy wysyłaniu metodą post, tylko nie do końca wiem jak to zrobić

Także pomocy ( ͡° ͜ʖ ͡°)

CSRFHEADER
CORSFILTER

AppConfig
SecurityConfig
  • 7
@szczepqs:workaround mi nie podchodzi ;) Na necie też coś ciężko znaleźć z normalną odpowiedzią bo już próbowałem wszystkiego. Moge też csfr wyłączyć, lecz nie wiem czy to dobry pomysł.

Nie wiem czy kwestią tego nie jest to, że pierwszy raz z serwerem backend łącze się dopiero przy wysłaniu posta i tu może być problem z ciastkami, że Spring może nie załączył ciastka do klienta przed wysłaniem. Spróbuje na początek załadować jakiś
@edzio94: Ale co Ci przeszkadza korzystanie z takiego proxy? Przecież i tak będziesz to deployował na jakiejś domenie i wtedy nie będzie problemu.

Wydaje mi się że mam to skonfigurowane bez workaroundu na prywatnym kompie, jak wrócę wieczorem do domu, to podrzucę :P
Zablokowano żądanie do zasobu innego pochodzenia: zasady „Same Origin Policy” nie pozwalają wczytywać zdalnych zasobów z „http://localhost:8080/registerAccount”

@edzio94: Same origin policy powinno być ustawiene z pliku konfiguracyjnego. Na localhoście masz taki z adresem na localhost:8080 i hulaj dusza.

A niestety, masz zahardcode'owane na jakąś dziwną wartośćc:

response.setHeader("Access-Control-Allow-Origin", "POST");

Która nie ma sensu. :P
@szczepqs: Udało sie. Wytłumaczenie poniżej. Ale możesz podesłać tego konfiga bo jestem w sumie ciekaw. @Ginden: ta operacja jest oznaką mojej straconej nadziei i robienia czegokolwiek by to zadziałało :p @cjkas: wołam, może jesteś ciekaw


Udało się w końcu. Nie wina konfiguracji springa, nie wina CORSa tylko Angulara(a dokładniej niedoinformowanie)

Testowałem metodą taką, że najpierw wysyłam geta na zwykłe zapytanie na server by otrzymać cookies od localhost:8080 [backend] i