[JAVA] Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf

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.

PreAuthorize-Definition auf der Controllerseite

Controller.java


    @PreAuthorize("@customPreAuthorizer.belongGroup(#groupId, authentication.principal)")
    @RequestMapping("/group/{groupId}/list")
    public String list(Model model, @PathVariable("groupId") Long groupId) {
    }

Bohnendefinition

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;
    }
}

Kommentar

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

Rufen Sie Ihre eigene Methode mit PreAuthorize in Spring Security auf
Fügen Sie mit Spring Security Ihre eigenen Authentifizierungselemente hinzu
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Erstellen Sie Ihr eigenes Dienstprogramm mit Thymeleaf mit Spring Boot
Behandeln Sie das gehashte Passwort mit BCryptPasswordEncoder von Spring Security in Perl
Sicherheit der Verwendungsnotizmethode für Spring Security
[ruby] Eine Methode mit einem Argument aufrufen
Verwenden Sie mit Rails6 Ihre eigene Klasse im lib-Verzeichnis
Melden Sie sich mit HttpServletRequest # in Spring Security in der Servlet 3.x-Umgebung an
Implementierte Authentifizierungsfunktion mit Spring Security ②
Rufen Sie Chain from Chain in Spring Integration auf
Erstellen Sie mit JMeter Ihren eigenen Sampler
Implementierte Authentifizierungsfunktion mit Spring Security ③
So erstellen Sie mit Spring Boot einen eigenen Controller, der / error entspricht
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Rufen Sie die Super-Methode in Java auf
Rufen Sie Java-Methoden aus JavaScript auf, das in Java ausgeführt wird
Erstellen Sie Ihren eigenen Validator mit Bean Validation
Verstehen Sie die Java-Oberfläche auf Ihre eigene Weise
Parallelitätsmethode in Java mit grundlegendem Beispiel
DB-Authentifizierung mit Spring Security und Hashing mit BCrypt
Verwenden Sie Spring Security JSP-Tags mit FreeMarker
Wie Spring Security mit Hello World funktioniert
Erreichen Sie die BASIC-Authentifizierung mit Spring Boot + Spring Security
Testen Sie den Controller mit Mock MVC im Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Implementieren Melden Sie sich mit Twitter in Spring-Boot, Sicherheit, Soziales an
Hash-Passwörter mit Spring Boot + Spring Security (mit Salt, mit Stretching)
Tests mit @Parameters in Spring 4.3 sollten keine Parameter haben
Versuchen Sie die LDAP-Authentifizierung mit Spring Security (Spring Boot) + OpenLDAP
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Erstellen Sie mit Spring Boot 2.0 einen Spring Cloud Config Server mit Sicherheit