Wir verwenden Spring Security 3.1.3-RELEASE mit Sicherheit auf Methodenebene. Es funktioniert perfekt.
Ich möchte mich anmelden und dem Benutzer möglicherweise zeigen, warum ihm der Zugriff verweigert wird.
Wenn ich eine org.springframework.security.web.access.AccessDeniedHandlerImpl
Unterklasse verwende, kann ich einen Verweis auf das org.springframework.security.access.AccessDeniedException
erhalten, aber ich kann keinen Weg finden um herauszufinden, was das verursacht hat (zB 'Fehlende Rolle ROLE_ADMIN' oder etwas in diesem Sinne).
Fehle ich etwas oder existiert es einfach nicht?
Leider ist dies nicht möglich mit Standardimplementierungen, die in Spring Security verfügbar sind.
Ich habe Quellcode untersucht und ...
MethodSecurityInterceptor
ist verantwortlich für den Schutz von Methodenaufrufen. Er delegiert Zugriffsentscheidungen an AccessDecisionManager
.
Ich habe jede Implementierung von AccessDecisionManager
out of box geprüft.
Jeder von ihnen löst AccessDeniedException
Ausnahme auf ähnliche Weise aus.
AbstractAccessDecisionManager.accessDenied
ist der Name der Nachricht, die lokalisiert werden kann.
Für Englisch ist es:
%Vor%Es sind mehrere Sprachen verfügbar, und Sie können eigene Übersetzungen erstellen, aber ...
Das ist alles, keine weiteren Informationen über Gründe der Ausnahme.
Weitere Informationen zur Lokalisierung von Ausnahmemeldungen:
Ich habe auch ein jira-Problem dafür erstellt: Ссылка
@PreAuthorize, @PostAuthorize, @Secured
Annotation kann einen Parameter haben, um auf die Eigenschaft für benutzerdefinierte Nachrichten zu zeigen, um detaillierte & amp; benutzerfreundlichere Ausnahmemeldungen.
Dies könnte auch durch Angabe eines Parameters erfolgen. Um einen Klassennamen zu definieren, der AccessDeniedException
erweitert, um ihn zu erhöhen, können Benutzer den Rest behandeln.
Auf diese Weise können komplexe Regeln wie
verarbeitet werden @PreAuthorize("record.createuser != authentication.getName()")
Wir können einen definierten Fehler wie
bekommen "You cannot process a record that you created.""
usw. anstelle von "Access is denied"
Tags und Links exception-handling spring spring-security exception