编程知识 cdmana.com

Sécurité du printemps - [authentification, autorisation, déconnexion et contrôle des droits]

Table des matières

Spring SecurityIntroduction:

Construction d'un environnement expérimental:

Certification et autorisation

Contrôle des droits et déconnexion


Spring SecurityIntroduction:

Spring Security Oui.SpringCadre de sécurité du projet,C'est aussiSpring BootSélection technique par défaut du module de sécurité sous - jacent,Il peut être puissantWebContrôles de sécurité,Pour les contrôles de sécurité,Nous avons juste besoin d'introduire spring-boot-starter-security Module,Effectuer une petite configuration,Pour une gestion de sécurité robuste!

Rappelez - vous quelques classes:

  • WebSecurityConfigurerAdapter:PersonnalisationSecurityStratégie

  • AuthenticationManagerBuilder:Politique d'authentification personnalisée

  • @EnableWebSecurity:OuvertWebSecurityMode

Spring SecurityLes deux principaux objectifs sont les suivants: “Certification” Et “Autorisation”(Contrôle d'accès).

“Certification”(Authentication)

L'authentification consiste à vérifier vos identifiants,Comme le nom d'utilisateur/UtilisateursIDEt le mot de passe,Pour vérifier votre identité.

L'authentification se fait généralement par nom d'utilisateur et mot de passe,Parfois utilisé en conjonction avec des facteurs d'authentification.

“Autorisation” (Authorization)

L'autorisation se produit après que le système vous a authentifié avec succès,Vous obtiendrez enfin l'accès aux ressources(Comme l'information,Documentation,Base de données,Financement,Emplacement,Presque n'importe quoi.)Permissions complètes pour.

Ce concept est universel, Pas seulement dans Spring Security Existe dans.

Spring Security Le cadre soutient bien la certification et l'autorisation .En termes d'authentification des utilisateurs,Spring Security Le cadre soutient les principales méthodes d'authentification,Y compris: HTTP Certification de base、HTTP Validation des formulaires、HTTP Certification sommaire、OpenID Et LDAP Attendez..En termes d'autorisation des utilisateurs,Spring Security Une liste de contrôle d'accès et de contrôle d'accès fondée sur les rôles est fournie(Access Control List,ACL),Vous pouvez contrôler à grain fin les objets de domaine dans votre application.

En bas.spring securitySite officiel:Spring Security    Trouver le document officiel correspondant :Spring Security Reference

Construction d'un environnement expérimental:

1. Créer un nouveau springbootProjetswebModule,thymeleafModule

2.Importer des ressources statiques

 3、controllerSaut!

 4、 Tester le succès de l'environnement expérimental

Certification et autorisation

L'environnement dans lequel nous testons , Tout le monde a accès à ,Maintenant, on utilise Spring Security  Ajouter des fonctions de certification et d'autorisation

1、Introduction Spring Security Module

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2、Compilation Spring Security Configurer la classe

  Voir le document officiel correspondant :Spring Security Reference

3、 Écrire la classe de configuration de base

@EnableWebSecurity // OuvertWebSecurityMode
public class SecurityConfig extends WebSecurityConfigurerAdapter {

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       
  }
}

4. Règles définissant l'autorisation :

Voir la source de l'autorisation dans la classe de configuration :

 5、Tests, J'ai découvert qu'il n'y avait pas d'autre entrée que la page d'accueil ! Parce que nous n'avons actuellement aucun rôle de connexion , Parce que la demande exige que le rôle connecté ait les permissions appropriées pour !

 6、Inconfigure() Ajouter la configuration suivante à la méthode , Activer la fonction de connexion configurée automatiquement !

D'après l'interprétation du code source

//  Activer la fonction de connexion configurée automatiquement 
// /login  Demande d'accès à la page d'atterrissage 
// /login?error  Rediriger ici signifie que la connexion a échoué 
http.formLogin();

 7、Testez:Découverte, Quand il n'y a pas de permission , Va sauter à la page de connexion !

8、 Voir les commentaires sur la page de connexion précédente ;

Nous pouvons définir les règles de certification , Voir à partir du code source

Réécritureconfigure(AuthenticationManagerBuilder auth)Méthodes

// Définir les règles de certification 
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
   
   // Définir en mémoire ,On peut aussijdbcPrends ça.....
   auth.inMemoryAuthentication()
          .withUser("kuangshen").password("123456").roles("vip2","vip3")
          .and()
          .withUser("root").password("123456").roles("vip1","vip2","vip3")
          .and()
          .withUser("guest").password("123456").roles("vip1","vip2");
}

9、Tests, Nous pouvons utiliser ces comptes pour nous connecter aux tests ! Il y a des erreurs à signaler !

There is no PasswordEncoder mapped for the id “null”

10、Raisons, Nous allons crypter le mot de passe passé à l'avant d'une manière ou d'une autre , Sinon, vous ne pourrez pas vous connecter ,Modifier le Code

 11、Tests,Connexion réussie, Et chaque rôle n'a accès qu'à ses propres règles d'authentification

Contrôle des droits et déconnexion

1、 Activer la fonction de déconnexion configurée automatiquement

2、À l'avant., Ajouter un bouton pour déconnecter ,index.html Dans la barre de navigation

<a class="item" th:href="@{/logout}">
   <i class="sign-out icon"></i> Déconnecter
</a>

3、 On peut aller tester , Cliquez sur déconnecter après une connexion réussie , Une fois que vous avez trouvé la connexion terminée, vous allez à la page de connexion !

4、Mais, Nous voulons qu'après qu'il ait réussi à se déconnecter , Vous pouvez toujours passer à la page d'accueil ,Qu'est - ce qu'il faut faire?

// .logoutSuccessUrl("/");  Logout réussi à la page d'accueil 
http.logout().logoutSuccessUrl("/");

5、Tests, Après la déconnexion , Trouver un saut à la page d'accueil OK

6、 Maintenant, une demande : Quand l'utilisateur n'est pas connecté , Seuls les boutons de connexion sont affichés sur la barre de navigation , Après la connexion de l'utilisateur , La barre de navigation affiche les informations de l'utilisateur connecté et le bouton logout !Et puis,Par exemple,longdiCet utilisateur,Il n'y a que vip2,vip3Fonction, Alors login n'affichera que ces deux fonctions ,Etvip1 Le menu de fonction de ne pas afficher ! C'est la vraie situation du site !

Nous devons combinerthymeleaf Quelques fonctions dans

sec:authorize="isAuthenticated()": Si l'ouverture de session est authentifiée ! Pour afficher différentes pages

MavenDépendance:

<dependency>
   <groupId>org.thymeleaf.extras</groupId>
   <artifactId>thymeleaf-extras-springsecurity5</artifactId>
   <version>3.0.4.RELEASE</version>
</dependency>

7、Modifier notre Page de première ligne

Importer des espaces de noms xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"

Modifier la barre de navigation, Ajouter un jugement de certification

8、Redémarrer le test, Vous pouvez vous connecter et essayer , Après une connexion réussie , Affiche la page que nous voulons ;

9、 Si vous vous déconnectez 404C'est, Parce qu'il empêche par défaut csrfDemande de falsification inter - station, Parce qu'il y a des problèmes de sécurité , La demande peut être changée en postPrésentation du formulaire,Ouspring securityFermeture moyennecsrfFonction; Essayez ici. Ajout de

 10、 Continuer à compléter l'authentification du bloc de rôles ci - dessous !Test réussi!

版权声明
本文为[LongDi - IDEA]所创,转载请带上原文链接,感谢
https://cdmana.com/2021/10/20211013211842755k.html

Scroll to Top