Spring Boot Controller kann nicht bei jedem Request erreicht werden

DiLa71

Mitglied
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 ;-)


Vielen Dank im voraus

Dirk
 
Zuletzt bearbeitet:
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.

Gruß

Claus
 
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
 
Ist der denn passend konfiguriert, dass die entsprechenden Security-Header nicht gefiltert werden?
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.
 
Zuletzt bearbeitet:
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.
unter anderem die, gibt afaik noch andere, die rein spielen könnten, weiß aber so aus dem Kopf nicht welche

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.

u.U. könnte das mit CSRF-Protection zu tun haben, das führt afaik auch zu einem 403er.

Allerdings ist das grad nur Rätselraten, ohne weitere Informationen :/

Was sind denn die Unterschiede zwischen Lokal uns Server? Liegen noch weitere Proxys dazwischen o.ä.?
 
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.
 

Zurück
Oben