[JAVA] Appelez votre propre méthode avec PreAuthorize dans Spring Security

Si vous souhaitez autoriser avec une logique un peu compliquée dans l'autorisation de méthode Spring Security, vous pouvez appeler la méthode de n'importe quel bean.

À propos, si vous souhaitez ajouter correctement une authentification personnalisée, la mise en œuvre de PermissionEvaluator est probablement une approche légitime. Cet article était facile à comprendre et détaillé sur l'implémentation de PermissionEvaluator. Ceci est recommandé si vous souhaitez ajouter un Evaluator à usage général pour le développement du framework d'extension. https://www.codeflow.site/ja/article/spring-security-create-new-custom-security-expression

Cette fois, la procédure est que vous pouvez écrire d'une manière un peu plus simple.

Définition de préautorisation côté contrôleur

Controller.java


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

Définition du haricot

CustomPreAuthorizer.java


@Component
public class CustomPreAuthorizer {
    public boolean belongGroup(Long groupId, UserDetails userDetails) {
         //Mettez en œuvre votre propre autorisation ici. Renvoie true si elle est autorisée à s'exécuter.
        return true;
    }
}

Commentaire

Vous pouvez faire référence au bean enregistré en tant que composant en ajoutant @ au début du nom du bean dans l'expression de PreAuthorize. @customPreAuthorizer

Les informations utilisateur de l'utilisateur authentifié peuvent être passées à l'argument avec ʻauthentication.principal`.

Si la description passée à l'argument dans PreAuthorize est redondante, la même chose peut être obtenue en appelant SecurityContext dans la méthode, afin qu'elle puisse être récupérée dans la méthode.

CustomPreAuthorizer.java


@Component
public class CustomPreAuthorizer {
    public boolean belongGroup(Long groupId) {
        var userDetails = (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        return true;
    }
}

Après cela, si vous étendez les détails de l'utilisateur et disposez des informations nécessaires lors de la connexion, vous pouvez implémenter et fournir l'autorisation d'origine étendue.

Recommended Posts

Appelez votre propre méthode avec PreAuthorize dans Spring Security
Ajoutez vos propres éléments d'authentification avec Spring Security
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
Créez votre propre utilitaire avec Thymeleaf avec Spring Boot
Gérer le mot de passe haché avec BCryptPasswordEncoder de Spring Security en Perl
Spring Security Usage Memo Method Security
[ruby] Appel d'une méthode avec un argument
Utilisez votre propre classe dans le répertoire lib avec Rails6
Connectez-vous avec HttpServletRequest # login dans Spring Security dans l'environnement Servlet 3.x
Mise en œuvre de la fonction d'authentification avec Spring Security ②
Chaîne d'appels depuis la chaîne dans l'intégration Spring
Créez votre propre échantillonneur avec JMeter
Implémentez la fonction d'authentification avec Spring Security ③
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot
Certification / autorisation avec Spring Security & Thymeleaf
Appelez la super méthode en Java
Appel de méthodes Java à partir de JavaScript exécutées en Java
Créez votre propre validateur avec Bean Validation
Comprenez l'interface java à votre manière
Méthode de concurrence en Java avec exemple de base
Authentification DB avec Spring Security et hachage avec BCrypt
Utiliser les balises JSP Spring Security avec FreeMarker
Comment Spring Security fonctionne avec Hello World
Obtenez une authentification BASIC avec Spring Boot + Spring Security
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot
Implémentez la connexion avec Twitter dans Spring-Boot, Security, Social
Hash des mots de passe avec Spring Boot + Spring Security (avec sel, avec étirement)
Les tests avec @Parameters dans Spring 4.3 ne devraient avoir aucun paramètre
Essayez l'authentification LDAP avec Spring Security (Spring Boot) + OpenLDAP
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Créez un serveur Spring Cloud Config en toute sécurité avec Spring Boot 2.0