Wir haben vor kurzem begonnen, die @PreAuthorize
Annotation mit unseren REST-Endpunkten zu verwenden. Es funktioniert gut, jedoch hatte ich eine Frage bezüglich des HTTP-Codes, der zurückgegeben wird, wenn ein GET im Gegensatz zu einem POST oder PUT ausgegeben wird. Es scheint, dass, wenn ein Benutzer nicht berechtigt ist, auf den REST-Endpunkt des Controllers zuzugreifen, der zurückgegebene HTTP-Status für GET und PUT/POST unterschiedlich ist.405 vs 403 zurückgegeben von Spring Controllers bei Verwendung von @ PreAuthorize
So, zum Beispiel, wenn ich einen Endpunkt habe, der ein GET ist und eine @PreAuthorize
Annotation hat und der Benutzer keinen Zugriff hat, wird eine 403 Forbidden zurückgegeben. Das ist, was ich erwarte. Wenn die gleiche Annotation dann auf eine Controller-Methode gesetzt wird, die ein POST oder ein PUT ist, lautet die HTTP-Antwort 405 Method Not Allowed (beachten Sie, dass die POST/PUT-Methode bei richtiger Autorisierung wie erwartet 200 zurückgibt).
Beim Durchlaufen des Codes können Sie sehen, dass der zugrunde liegende Sicherheitsfilter eine 403 zurückgibt, aber im POST/PUT-Szenario wird der Statuscode gelöscht/ignoriert und durch eine 405 ersetzt, ähnlich wie bei einer NullPointerExcpetion
Ihr Controller-Code.
Ist dies das erwartete Verhalten oder sollte eine 403 Forbidden immer für Benutzer zurückgegeben werden, die keinen Zugriff auf einen Endpunkt haben?
Ich habe das gleiche Problem – pinkpanther
Sieht für mich, dass die 405 wird durch die [Web-Sicherheitsschicht geworfen] (http://docs.spring.io/spring-security/site/docs/ 3.0.x/reference/el-access.html # el-access-web) anstelle der Zugriffssteuerungsschicht durch die @ PreAuthorize-Annotationen. Versuchen Sie, die Debug-Ebene für das Paket org.springframework.security zu aktivieren, um zu sehen, was wirklich dort passiert – danielgpm
ich denke, Ihre Anfrage Methodentyp ist nicht korrekt –