Maison Java javaDidacticiel Comment utiliser Spring Boot pour implémenter l'authentification de sécurité et la gestion des autorisations

Comment utiliser Spring Boot pour implémenter l'authentification de sécurité et la gestion des autorisations

Jun 22, 2023 pm 12:53 PM
spring boot 安全认证 授权管理

Avec le développement d'Internet, la sécurité des applications est devenue très importante et chaque programmeur doit prêter attention aux problèmes de sécurité. Étant donné que le framework Spring est largement utilisé dans les applications d'entreprise à grande échelle, Spring Boot est un choix très populaire pour développer des applications Web. Dans cet article, nous apprendrons comment utiliser Spring Boot pour implémenter l'authentification de sécurité et la gestion des autorisations.

1. Authentification et autorisation

Avant de commencer à discuter de la mise en œuvre par Spring Boot de l'authentification et de l'autorisation de sécurité, nous devons comprendre ce que sont l'authentification et l'autorisation.

L'authentification consiste à confirmer si l'identité d'une entité est légale. Dans les applications Web, il s'agit généralement de confirmer si l'utilisateur est un utilisateur légitime.

L'autorisation consiste à accorder des autorisations d'exploitation spécifiques à une entité après avoir confirmé qu'elle est légale. Dans les applications Web, il est courant de confirmer que l'utilisateur dispose des droits d'accès appropriés à la ressource demandée.

2. Spring Boot Security Framework

Spring Boot fournit un cadre de sécurité qui peut facilement mettre en œuvre l'authentification de sécurité et la gestion des autorisations pour les applications Web. Spring Security fait partie du cadre de sécurité Spring Boot. Il fournit un cadre configurable pour garantir que les applications peuvent s'exécuter en toute sécurité.

Spring Security fournit les fonctions suivantes :

1. Authentification et autorisation de sécurité

2 Prise en charge HTTPS

3. Prise en charge des demandes inter-domaines

5. Prise en charge LDAP

7, prise en charge OpenID

8, prise en charge OAuth 2.0

3. Configuration de la sécurité Spring Boot

Avant de commencer à utiliser Spring Boot pour implémenter l'authentification et l'autorisation de sécurité, nous devons comprendre la configuration de sécurité de Spring Boot.

Spring Boot utilise la configuration et les annotations Java pour configurer la sécurité. La configuration de la sécurité est définie dans une classe annotée avec @EnableWebSecurity pour activer la sécurité, puis définit une classe qui hérite de WebSecurityConfigurerAdapter pour configurer la sécurité.

Voici un exemple de configuration de sécurité de base de Spring Boot :

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
    
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("admin").password("admin").roles("ADMIN")
                .and()
                .withUser("user").password("user").roles("USER");
    }
}
Copier après la connexion

Dans la configuration ci-dessus, nous activons la sécurité à l'aide de l'annotation @EnableWebSecurity, puis définissons une classe qui hérite de WebSecurityConfigurerAdapter. La méthode

configure() sera appelée lorsque l'application démarrera pour définir les règles de sécurité des requêtes HTTP. Dans cet exemple, nous définissons trois règles :

1. Toute URL commençant par /admin/ n'est accessible qu'aux utilisateurs ayant le rôle d'ADMIN.

2. Toute URL commençant par /user/ permet aux utilisateurs ayant le rôle d'ADMIN ou d'UTILISATEUR d'accéder.

3. Toutes les autres demandes nécessitent une authentification.

La méthode formLogin() définit l'emplacement du formulaire de connexion et permet à tous les utilisateurs d'y accéder.

La méthode logout() définit la fonction de déconnexion et permet l'accès à tous les utilisateurs. La méthode

configureGlobal() configure un schéma d'authentification en mémoire, comprenant le nom d'utilisateur et le mot de passe ainsi que les rôles attribués.

Ceci n'est qu'un exemple simple, des configurations de sécurité plus complexes peuvent être configurées à l'aide de diverses options Spring Security.

4. Fournisseur d'authentification

Dans l'exemple de configuration ci-dessus, nous avons utilisé un schéma d'authentification en mémoire. Cependant, en réalité, nous utilisons généralement une base de données pour stocker les informations des utilisateurs. Spring Security nous fournit des fournisseurs d'authentification pour gérer l'authentification.

Dans Spring Security, un fournisseur d'authentification est une interface dans laquelle la méthode Authenticate() doit être implémentée pour effectuer l'authentification. Les fournisseurs d'authentification peuvent être en mémoire, sur une base de données relationnelle ou basés sur LDAP, etc.

Voici un exemple de fournisseur d'authentification basé sur une base de données :

@Service
public class UserDetailsServiceImp implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByName(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new org.springframework.security.core.userdetails.User(user.getName(), user.getPassword(),
                AuthorityUtils.createAuthorityList(user.getAuthorities()));
    }
}
Copier après la connexion

Dans le code ci-dessus, nous avons défini une classe UserDetailsServiceImp qui implémente l'interface UserDetailsService. La méthode loadUserByUsername() charge les informations utilisateur à partir de la base de données et renvoie l'objet UserDetails de Spring Security, qui contient le nom d'utilisateur, le mot de passe et l'autorisation.

5. Gestion des autorisations

Dans Spring Boot, nous pouvons utiliser Spring Security pour la gestion des autorisations basée sur les rôles. Spring Security propose deux méthodes de gestion des autorisations : déclarative et programmatique.

1. Déclarative

Dans l'autorisation déclarative, nous pouvons utiliser les annotations @PreAuthorize et @PostAuthorize pour définir des règles de contrôle d'accès. @PreAuthorize est utilisé pour spécifier les conditions qui doivent être remplies avant d'accéder à la méthode, tandis que @PostAuthorize est utilisé pour spécifier les conditions qui doivent être remplies avant de revenir.

Ce qui suit est un exemple de gestion des autorisations basée sur la déclaration :

@Service
public class ProductService {
    @PreAuthorize("hasRole('ROLE_ADMIN')")
    public void addProduct() {
        // add product
    }
    
    @PreAuthorize("hasRole('ROLE_USER')")
    @PostAuthorize("returnObject.owner == authentication.name")
    public Product findProductByName(String name) {
        // find product by name
    }
}
Copier après la connexion

Dans le code ci-dessus, nous avons ajouté des annotations @PreAuthorize aux méthodes addProduct() et findProductByName() pour définir des règles de contrôle d'accès.

Dans la méthode addProduct(), nous limitons l'accès des utilisateurs ayant le rôle ROLE_ADMIN à cette méthode.

Dans la méthode findProductByName(), nous limitons l'accès à la méthode aux utilisateurs dotés du rôle ROLE_USER et définissons une autre règle de contrôle d'accès à l'aide de l'annotation @PostAuthorize pour garantir que seul le propriétaire du produit retourné est authentifié. Le produit sera uniquement renvoyé. quand les utilisateurs sont les mêmes.

2. Programmatique

Dans l'autorisation programmatique, nous pouvons utiliser l'API Spring Security pour définir des règles de contrôle d'accès.

Ce qui suit est un exemple de gestion des autorisations programmatiques :

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserService userService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll()
                .and()
            .csrf().disable()
            .exceptionHandling().accessDeniedHandler(accessDeniedHandler());
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
    }
    
    @Bean
    public AccessDeniedHandler accessDeniedHandler(){
        return new CustomAccessDeniedHandler();
    }
    
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
Copier après la connexion

在上面的代码中,我们定义了一个UserService类来处理用户信息,并在configure()方法中使用了accessDeniedHandler()方法来定制访问被拒绝时的错误信息。

我们还实现了一个CustomAccessDeniedHandler类来自定义访问被拒绝时的响应。

最后,我们使用了PasswordEncoder来编码密码。

六、结论

在本文中,我们了解了如何使用Spring Boot实现安全认证和授权管理。我们已经讨论了Spring Boot安全框架、安全配置、身份验证提供器和授权管理等关键概念。我们还讨论了如何使用声明式和编程式授权管理。通过使用Spring Boot的安全框架,我们可以轻松地为Web应用程序提供安全性,并确保应用程序可以安全地运行。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Nginx Proxy Manager pour implémenter la gestion des autorisations d'accès inter-domaines Comment utiliser Nginx Proxy Manager pour implémenter la gestion des autorisations d'accès inter-domaines Sep 27, 2023 pm 04:43 PM

Comment utiliser NginxProxyManager pour implémenter la gestion des autorisations d'accès entre domaines. NginxProxyManager est un serveur proxy puissant qui peut implémenter un proxy inverse, un équilibrage de charge, un proxy de terminal SSL/TLS et d'autres fonctions. Dans les applications pratiques, nous rencontrons souvent des problèmes d'accès inter-domaines front-end. Afin de protéger les ressources back-end, nous devons effectuer une gestion des autorisations. Cet article expliquera comment utiliser NginxProxyManager pour mettre en œuvre la gestion des autorisations d'accès inter-domaines et fournir

Spring Boot+MyBatis+Atomikos+MySQL (avec code source) Spring Boot+MyBatis+Atomikos+MySQL (avec code source) Aug 15, 2023 pm 04:12 PM

Dans les projets réels, nous essayons d'éviter les transactions distribuées. Cependant, il est parfois vraiment nécessaire de procéder à un fractionnement des services, ce qui entraînera des problèmes de transactions distribuées. Dans le même temps, des transactions distribuées sont également demandées sur le marché lors des entretiens. Vous pouvez vous entraîner avec ce cas et parler de 123 lors de l'entretien.

Bénéficiez d'un support multilingue et d'applications internationales grâce à Spring Boot Bénéficiez d'un support multilingue et d'applications internationales grâce à Spring Boot Jun 23, 2023 am 09:09 AM

Avec le développement de la mondialisation, de plus en plus de sites Web et d'applications doivent fournir un support multilingue et des fonctions d'internationalisation. Pour les développeurs, la mise en œuvre de ces fonctions n’est pas une tâche facile car elle nécessite de prendre en compte de nombreux aspects, tels que la traduction linguistique, les formats de date, d’heure et de devise, etc. Cependant, grâce au framework SpringBoot, nous pouvons facilement implémenter un support multilingue et des applications internationales. Tout d’abord, comprenons l’interface LocaleResolver fournie par SpringBoot. Lieu

Comment utiliser Spring Boot pour créer des applications de traitement de Big Data Comment utiliser Spring Boot pour créer des applications de traitement de Big Data Jun 23, 2023 am 09:07 AM

Avec l’avènement de l’ère du Big Data, de plus en plus d’entreprises commencent à comprendre et à reconnaître la valeur du Big Data et à l’appliquer à leurs activités. La question qui se pose est de savoir comment gérer ce flux important de données. Dans ce cas, les applications de traitement du Big Data sont devenues quelque chose que chaque entreprise doit prendre en compte. Pour les développeurs, comment utiliser SpringBoot pour créer une application efficace de traitement du Big Data est également une question très importante. SpringBoot est un framework Java très populaire qui permet

Implémenter le mappage ORM basé sur Spring Boot et MyBatis Plus Implémenter le mappage ORM basé sur Spring Boot et MyBatis Plus Jun 22, 2023 pm 09:27 PM

Dans le processus de développement d'applications Web Java, la technologie de mappage ORM (Object-RelationalMapping) est utilisée pour mapper les données relationnelles de la base de données avec des objets Java, ce qui facilite l'accès et l'exploitation des données par les développeurs. SpringBoot, en tant que l'un des frameworks de développement Web Java les plus populaires à l'heure actuelle, a fourni un moyen d'intégrer MyBatis, et MyBatisPlus est un framework ORM étendu sur la base de MyBatis.

Intégration et utilisation de Spring Boot et base de données NoSQL Intégration et utilisation de Spring Boot et base de données NoSQL Jun 22, 2023 pm 10:34 PM

Avec le développement d’Internet, l’analyse des mégadonnées et le traitement de l’information en temps réel sont devenus un besoin important pour les entreprises. Afin de répondre à de tels besoins, les bases de données relationnelles traditionnelles ne répondent plus aux besoins du développement commercial et technologique. Au lieu de cela, l’utilisation de bases de données NoSQL est devenue une option importante. Dans cet article, nous aborderons l'utilisation de SpringBoot intégré aux bases de données NoSQL pour permettre le développement et le déploiement d'applications modernes. Qu'est-ce qu'une base de données NoSQL ? NoSQL n'est pas seulement du SQL

Créer un système ESB à l'aide de Spring Boot et Apache ServiceMix Créer un système ESB à l'aide de Spring Boot et Apache ServiceMix Jun 22, 2023 pm 12:30 PM

Alors que les entreprises modernes s’appuient de plus en plus sur une variété d’applications et de systèmes disparates, l’intégration d’entreprise devient encore plus importante. Enterprise Service Bus (ESB) est un modèle d'architecture d'intégration qui connecte différents systèmes et applications entre eux pour fournir des services communs d'échange de données et de routage de messages afin de réaliser l'intégration des applications au niveau de l'entreprise. En utilisant SpringBoot et ApacheServiceMix, nous pouvons facilement créer un système ESB. Cet article explique comment l'implémenter. SpringBoot et A

Spring Boot implémente la technologie de séparation lecture-écriture MySQL Spring Boot implémente la technologie de séparation lecture-écriture MySQL Aug 15, 2023 pm 04:52 PM

Comment réaliser la séparation lecture-écriture, projet Spring Boot, la base de données est MySQL et la couche de persistance utilise MyBatis.

See all articles