Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Spring Boot Controller kann nicht bei jedem Request erreicht werden
Hallo,
ich habe eine kleine Anwendung geschrieben bestehend aus mehreren Spring Boot Projekten.
Projekt 1: Frontend,
Projekt 2: Backend mit einem Controller und den CRUD-Methoden,
Projekt 3: Zuul
Projekt 4: Eureka
das Ganze ist durch einen Keycloak (KC) gesichert.
Im Backend sollen in dieser Ausbaustufe Nutzer auf dem KC angelegt werden und auf der Platte je ein Verzeichnis für sie erzeugt werden. KC und seine MySQL-DB laufen je in einem Dockercontainer.
Lokal funktioniert alles prima.
Ich rufe meine Seite auf, logge mich ein, gehe in die Userübersicht, bekomme per GET Request vom Server die Auskunft es gäbe keine Nutzer, gehe zum Anlegen, sende die Daten per PUT ans Backend, der Nutzer wird angelegt, bei Rückkehr zur Übersicht bekomme ich den neuen Nutzer nach neuem GET Request angezeigt.
Dabei ist es egal ob das Alles aus Eclipse als "Spring Boot App" starte oder es mit maven erstelle und dann per java -jar ..... starte
Nun mein Problem:
Packe ich alles auf einen Server und starte es da, bekomme per GET Request vom Server zwar die Auskunft es gäbe keine Nutzer, gehe ich aber zum Anlegen und sende sie Daten per PUT ans Backend bekomme ich "status":403,"error":"Forbidden","message":"No message available".
Es wird bei beiden die gleiche URL gerufen nur einmal per GET und einmal per PUT mit Daten.
Wenn man nach 403 googelt findet man alles und nichts, drum würden mich schon ein paar Anregungen nach was ich konkret suchen kann happy machen, ein Lösungsansatz natürlich noch mehr ;-)
403 bedeutet in der REgel, dass Du zwar eingeloggt bist aber laut der Role nicht die berechtigung hast diese Aktion zu machen. Da würde ich mal ansetzen.
alse erstes vielen Dank. @mrBrown es läuft bei beiden über Zuul @Thallius es ist nur gesagt, dass man eingeloggt sein muss.
In meinem SecurityConfig extends KeycloakWebSecurityConfigurerAdapter lege ich nur fest:
.antMatchers("/*").authenticated()
Beide gerufenen Methoden stehen in der selben Controller Klasse
Meinst Du damit in der Zuul-Konfiguration: sensitive-headers:
Cookie,Set-Cookie
Wenn das gemeint ist, dann ist das geschehen, wenn ich das nicht mache, dann bekomme ich eine 401.
Wie gesagt, mein größtes Rätsel ist, dass
GET zuuladresse:zuulport/api/ sauber durch geht und
PUT zuuladresse:zuulport/api/ als Forbidden abgewiesen wird.
Ich hatte zuerst (es ist meine erste solche App) gedacht, dass die Annotation: @CrossOrigin(origins = "*") ohne Methodenangabe über der Klasse eventuell defaultmäßig nur GET durchlassen würde, so dass ich das schon zu
@CrossOrigin(origins = "*", methods= {RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT,RequestMethod.DELETE}) erweitert habe, was aber auch nichts ändert.
Meinst Du damit in der Zuul-Konfiguration: sensitive-headers:
Cookie,Set-Cookie
Wenn das gemeint ist, dann ist das geschehen, wenn ich das nicht mache, dann bekomme ich eine 401.
Wie gesagt, mein größtes Rätsel ist, dass
GET zuuladresse:zuulport/api/ sauber durch geht und
PUT zuuladresse:zuulport/api/ als Forbidden abgewiesen wird.
Ich hatte zuerst (es ist meine erste solche App) gedacht, dass die Annotation: @CrossOrigin(origins = "*") ohne Methodenangabe über der Klasse eventuell defaultmäßig nur GET durchlassen würde, so dass ich das schon zu
@CrossOrigin(origins = "*", methods= {RequestMethod.GET,RequestMethod.POST,RequestMethod.PUT,RequestMethod.DELETE}) erweitert habe, was aber auch nichts ändert.
die CRSF Protection ist für den Testbetrieb erst mal
.csrf().disable() eingestellt,
ebenso ist auf dem Server der Zuulport freigegeben, so dass ich direkt darauf zugreife.