2016-08-09 7 views
1

Ich versuche, den Frühling endpoints zu verwenden anmutig meine Anwendung herunterzufahren, aber ich erhalte eine Fehlermeldung:Frühling ordnungsgemäßes Herunterfahren - Request-Methode POST NOT SUPPORTED

2016-08-09 13:46:54.606 WARN 13315 --- [nio-8090-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Handler execution resulted in exception: Request method 'POST' not supported 

Ich verwende this Führer und ich habe meine application.properties auf endpoints.shutdown.enabled=true und auch endpoints.shutdown.sensitive=false eingestellt. Ich habe auch compile("org.springframework.boot:spring-boot-starter-actuator") in meinem Build.gradle enthalten.

Wenn ich die CURL Anfrage senden: curl -X POST https://localhost:8090/shutdown -k
ich die folgende Antwort vom Server erhalten:

{"timestamp":1470747537792,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/shutdown"} 

Bin ich etwas falsch gemacht? Gibt es etwas, das ich vermisse? Ich habe CSRF in der ganzen App aktiviert, also ist es keine Option, das für meine Anwendung zu deaktivieren.

+0

Was passiert, wenn Sie nicht POST verwenden? – RealSkeptic

+0

'{" timestamp ": 1470748694304," status ": 405," error ":" Methode nicht erlaubt "," Ausnahme ":" org.springframework.web.HttpRequestMethodNotSupportedException "," message ":" Methode 'GET' wird nicht angefordert unterstützt "," Pfad ":"/shutdown "}' – px06

Antwort

1

Wie von David vorgeschlagen, wird CSRF benötigt, da es global für alle POST Anfragen von Spring benötigt wird. Der einzige Weg, wie ich daran denken könnte, ihn zu umgehen, besteht darin, den CSRF für den /shutdown Endpunkt zu deaktivieren.

In meinem SecurityConfig I gesetzt:

http.csrf().ignoringAntMatchers("/shutdown"); 

Dies würde nur für die /shutdown url während es aktiv zu halten für den Rest der Anwendung des csrf Schutz deaktivieren.

Hinweis: Diese Einrichtung wurde im Frühjahr 4 hinzugefügt.

0

Sie müssen ein CSRF-Token entweder als Header oder Parameter oder etwas senden. Ihr Beispiel:

curl -X POST https://localhost:8090/shutdown -k 

enthält kein CSRF-Token, daher wird Spring es natürlich ablehnen. Das ist in der Tat der springende Punkt des CSRF-Filters. Sie müssen entscheiden, ob es angemessen ist, die /shutdown URI von diesem Filter auszuschließen oder ob ein Token/Nonce benötigt wird.

+1

Ich verstehe, dass die CSRF erforderlich ist, aber wie kann ich ein CSRF-Token an die '/ shutdown" URI senden? Gibt es eine Möglichkeit, ein Token zu generieren und das als Parameter zu senden? Es handelt sich nicht um eine Anforderungszuordnung, die ich definiere, da sie im Frühjahr vordefiniert ist. Daher bin ich verwirrt darüber, wie Kopfzeilen für die Anforderung bereitgestellt werden. – px06