Ich habe ein Setup, in dem wir JAX-RS/RestEasy zusammen mit Spring Security verwenden. In den meisten Fällen funktioniert es ganz gut, aber ich stolpere in einen unerwarteten Schluckauf mit der Behandlung von Ausnahmen, die von @PreAuthorize
ausgelöst werden.JAX-RS und Spring Security @ PreAuthorize Ausnahmebehandlung
Wir tun etwas Erlaubnis Bewertung Spel verwenden, etwa so:
@POST
@PreAuthorize("@permHandler.canUserUpdate(#request, authentication)")
diesem Fall wird entweder bewerten zu true
oder eine Ausnahme auslösen, UnauthorizedException
, mit einigen Informationen.
Das Problem in diesem Fall ist mit der Exception
richtig umgehen und den richtigen Fehlercode an den Client zurückgeben.
Ich habe einen typischen JAX-RS Ausdruck Mapper wie so ein:
@Provider
public static class UnauthorizedExceptionMapper implements ExceptionMapper<UnauthorizedException> {
@Override
public Response toResponse(UnauthorizedException exception) {
...
return Response.status(403).entity(error).build();
}
}
Dieser Handler nie getroffen wird, weil @PreAuthorize
mein UnauthorizedException
nicht sprudeln tut. Stattdessen ist es nicht ganz sicher, was zu tun ist und wirft stattdessen eine IllegalArgumentException
. Mapping der IllegalArgumentException
, um meine 403 Antwort zu bekommen, wird aus offensichtlichen Gründen nicht wirklich funktionieren.
Gibt es einen akzeptierten Weg, um dies mit dieser Einrichtung zu arbeiten? Die meisten der Dokumentation zur Dokumentation der Ausnahmebehandlung von Spring-Sicherheitsmerkmalen beziehen sich speziell auf Utilities für Spring Web oder Mvc, was hier nicht der Fall ist.
Jede Hilfe oder ein Nicken in die richtige Richtung wäre willkommen.
Ich könnte falsch sein, aber ich dachte, Spring 'Sicherheit auf Methodenebene, '@ PreAuthorize', löst eine' AccessDeniedException' aus. Sie können dies in Ihrer Spring Security Config 'HttpSecurity' mit der' exceptionHandling() 'Methode konfigurieren. – jmw5598
Das ist richtig, wenn '@ PreAuthorize' wahr oder falsch zurückgibt, was hier nicht der Fall ist, wir werfen eine Ausnahme in unser Autorisierungshilfsprogramm. – bvulaj