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

LongDi - IDEA 2021-10-14 05:10:13
curit du printemps authentification autorisation


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://javamana.com/2021/10/20211013211842755k.html

  1. Java虚拟机|JVM【适合初学者入门】
  2. [Azure Cloud Service] Azure Cloud Service ajoute des champs personnalisés pour le rôle Web (hôte IIS) (ajoute le champ user agent dans l'en - tête de demande http au Journal de sortie IIS)
  3. Spring Cloud 2021.0.0-M2 發布
  4. Java虛擬機|JVM【適合初學者入門】
  5. Spring Cloud 2021.0.0-m2 Release
  6. Machine virtuelle Java | JVM [convient aux débutants]
  7. 10412 Xiaopeng cars announced sales results in September
  8. Apprendre le mécanisme des événements Java
  9. Java script RPC (07) - timeout timeout Processing from zero
  10. Introduction à la page Web de rabbitmq (3)
  11. MySQL read - Write Separation Cluster Construction and Integration with mycat
  12. Analyse du principe du conteneur du CIO printanier
  13. Java面向对象基础
  14. Java communique avec les capteurs industriels via socket et DTu, RTU
  15. Xiaopeng automobile delivered 10412 units in September, with a monthly sales volume of more than 10000 for the first time
  16. Java Object Oriented Foundation
  17. Introduction au développement Android PDF, un tour pour vous apprendre à comprendre netty
  18. Hadoop Foundation - 01 - concepts de base
  19. Hadoop Foundation - 02 - Basic Structure
  20. Hadoop Foundation - 03 - hdfs (Hadoop Distributed File System) Basic Concepts
  21. Hadoop Foundation - 04 - hdfs API Programming
  22. Hadoop Foundation - 05 - hdfs Project (word Frequency Statistics)
  23. Hadoop Foundation - 06 - hdfs Data Read and write
  24. The "monthly test" report card of the new car built under the lack of core: Xiaopeng and Weilai took the lead in "breaking 10000", and the ideal plummeted by 25%
  25. Introduction to making arch linux software package
  26. Hard core observation 407 HTTPS everywhere browser extension is about to retire
  27. How to use busybox on Linux
  28. In 2021, the talent incentive plan of Linux foundation open source software School Park was officially launched
  29. It's not windows or Linux. Shrink is the "God operating system"
  30. Install anydesk on Ubuntu Linux
  31. 2021, can we recommend using Linux to play games?
  32. not exist:org.springframework.kafka.listener.AbstractMessageListenerContaingetContainerProperties()
  33. Are you sure HTTPS is asymmetric encryption for content encryption? See the answers and reasons
  34. MySQL online slow log query
  35. Java JDK server installation
  36. 手把手教你使用Java开发在线生成pdf文档
  37. Questions d'entrevue dans la base de données MySQL (dernière version 2021)
  38. Java零基础小白入门必做题汇总(建议收藏)第一篇
  39. Day15 Java Foundation
  40. Day16 Java Foundation
  41. Day17 Java Foundation
  42. Day18 Java Foundation
  43. Linux installe JDK 1.8 et configure les variables d'environnement
  44. Tutoriel d'utilisation Maven super détaillé
  45. Spring boot reads project parameter configuration
  46. Docker installing rocketmq
  47. Java Zero Basic small white Beginner must make a summary of issues (recommended Collection) Chapitre 1
  48. Manuel pour vous apprendre à utiliser le développement Java pour générer des documents PDF en ligne
  49. 40 + comment les femmes s'habillent - elles pour montrer leur jeunesse?Un manteau et une jupe vous donnent un look haut de gamme tout au long de l'automne et de l'hiver
  50. Tutoriel d'installation Ubuntu 16.04 / Hadoop 3.1.3Configuration autonome / pseudo - distribuée
  51. L'apprentissage le plus détaillé de springboot à l'échelle du réseau - day01
  52. L'apprentissage le plus détaillé de springboot sur le Web - day02
  53. L'apprentissage le plus détaillé de springboot sur le Web - day03
  54. L'apprentissage le plus détaillé de springboot sur le Web - day04
  55. Tutoriel d'utilisation Maven super détaillé
  56. L'apprentissage le plus détaillé de springboot sur le Web - day05
  57. L'apprentissage le plus détaillé de springboot sur le Web - day06
  58. L'apprentissage le plus détaillé de springboot sur le Web - day07
  59. Introduction to JavaScript - write a photo album for your girlfriend
  60. [Hadoop 3. X] HDFS storage type and storage strategy (V) overview