Wenn Sie die Autorisierung von Spring Security-Methoden mit etwas komplizierter Logik autorisieren möchten, können Sie die Methode einer beliebigen Bean aufrufen.
Wenn Sie die benutzerdefinierte Authentifizierung korrekt hinzufügen möchten, ist die Implementierung von PermissionEvaluator wahrscheinlich ein legitimer Ansatz. Dieser Artikel war leicht zu verstehen und detailliert über die Implementierung von PermissionEvaluator. Dies wird empfohlen, wenn Sie einen Allzweck-Evaluator für die Entwicklung von Erweiterungsframeworks hinzufügen möchten. https://www.codeflow.site/ja/article/spring-security-create-new-custom-security-expression
Diesmal ist das Verfahren, dass Sie etwas einfacher schreiben können.
Controller.java
@PreAuthorize("@customPreAuthorizer.belongGroup(#groupId, authentication.principal)")
@RequestMapping("/group/{groupId}/list")
public String list(Model model, @PathVariable("groupId") Long groupId) {
}
CustomPreAuthorizer.java
@Component
public class CustomPreAuthorizer {
public boolean belongGroup(Long groupId, UserDetails userDetails) {
//Implementieren Sie hier Ihre eigene Autorisierung. Gibt true zurück, wenn es ausgeführt werden darf.
return true;
}
}
Sie können auf die als Komponente registrierte Bean verweisen, indem Sie @ am Anfang des Bean-Namens im Ausdruck von PreAuthorize hinzufügen.
@customPreAuthorizer
Benutzerinformationen des authentifizierten Benutzers können mit "authentication.principal" an das Argument übergeben werden.
Wenn die an das Argument in PreAuthorize übergebene Beschreibung redundant ist, kann dasselbe durch Aufrufen von SecurityContext in der Methode abgerufen werden, sodass sie in der Methode abgerufen werden kann.
CustomPreAuthorizer.java
@Component
public class CustomPreAuthorizer {
public boolean belongGroup(Long groupId) {
var userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return true;
}
}
Wenn Sie anschließend die Benutzerdetails erweitern und beim Anmelden über die erforderlichen Informationen verfügen, können Sie die erweiterte ursprüngliche Berechtigung implementieren und bereitstellen.
Recommended Posts