La nature de la sécurité du printemps
Spring Security est essentiellement une série de filtres, qui sont ensuite insérés dans la chaîne de filtre en tant que filtre séparé, appelé filterchainproxy. Comme indiqué sur la figure.
En fait, il peut y avoir plusieurs chaînes de filtres sous filterchainproxy pour vérifier différentes URL, et les filtres détenus dans la chaîne de filtre augmenteront ou diminueront automatiquement en fonction du service défini. Il n'est donc pas nécessaire d'afficher et de définir ces filtres à moins que vous ne souhaitiez implémenter votre propre logique.
Catégories clés
Authentification
L'authentification est une interface utilisée pour représenter les informations d'authentification des utilisateurs. Avant que l'utilisateur ne se connecte pour authentifier, les informations pertinentes seront encapsulées dans un objet de la classe d'implémentation spécifique à l'authentification. Une fois l'authentification de connexion réussie, un objet d'authentification avec des informations plus complets, y compris les autorisations des utilisateurs et d'autres informations, sera générée, puis enregistrée dans la sécurité de sécurité détenue par SecurityContexTholder pour les programmes ultérieurs à appeler, tels que l'authentification des droits d'accès.
AuthenticationManager
L'interface principale utilisée pour la vérification est AuthenticationManager, qui n'a qu'une seule méthode:
Interface publique AuthenticationManager {Authentification Authentication (authentification Authentication) lève AuthenticationException;}Il peut y avoir trois situations après l'exécution de la méthode Authenticiate ():
La vérification est réussie et une authentification avec les informations utilisateur est renvoyée.
La vérification a échoué et une exception AuthenticationException a été lancée.
Incapable de juger, retournez null.
Fournisseur
ProviderManager est la mise en œuvre la plus courante de l'authentification Manager ci-dessus. Il ne gère pas la vérification par lui-même, mais délégue la vérification à la liste d'authentificationProvider qu'il configure, puis appelle chaque AuthenticationProvider à son tour pour l'authentification. Dans ce processus, tant qu'un AuthenticationProvider est authentifié avec succès, aucune vérification ne se poursuivra. Ce résultat d'authentification sera directement utilisé comme résultat d'authentification de ProviderManager.
Processus de certification
Les utilisateurs se connectent avec leur nom d'utilisateur et leur mot de passe.
Spring Security résume le nom d'utilisateur et le mot de passe obtenus dans une classe d'implémentation d'interface d'authentification, telle que la USernamePasswordAuthenticationToken usernamepassword-atelication couramment utilisée.
Passez l'objet d'authentification généré ci-dessus à l'authentification de la classe d'implémentation AuthenticationManager pour l'authentification.
ProviderManager appelle chaque AuthenticationProvider à son tour pour l'authentification. Une fois l'authentification réussie, un objet d'authentification résume les autorisations utilisateur et d'autres informations seront renvoyées.
Attribuez l'objet d'authentification renvoyé par AuthenticationManager au SecurityContex actuel.
Vérification personnalisée
Avec les réserves de connaissances ci-dessus, vous pouvez personnaliser la méthode de vérification. D'après ce qui précède, nous pouvons voir qu'en fait, les AuthenticationProviders sont réellement utilisés pour effectuer des opérations de vérification. Par conséquent, si vous souhaitez personnaliser la méthode de vérification, vous n'avez qu'à implémenter votre propre AuthenticationProvider, puis l'ajouter au ProviderManager.
Personnaliser AuthenticationProvider
@ComponentPublic Class CustomAuthenticationProvider implémente AuthenticationProvider {@Override Public Authentication Authentication (Authentication Authentication) lève AuthenticationException {String Name = Authentication.getName (); String mot de passe = authentication.getCredentials (). ToString (); if (shouldAuthenticateAgainstThirdParTySystem ()) {// Utilisez les informations d'identification // et authentifiez le système tiers renvoie un nouveau userNamePasswordAuthenticationToken (nom, mot de passe, nouveau ArrayList <> ()); } else {return null; }} @Override public booléen supports (class <?> Authentication) {return authentication.equals (usernamepasswordAuthenticationToken.class); }}La méthode supports () accepte un paramètre d'authentification pour déterminer si l'authentification a transmise est un type que l'authentification peut gérer.
Enregistrez AuthenticationProvider
Enregistrez maintenant l'authentificationProvider que vous venez de créer dans le ProviderManager et toutes les opérations sont terminées.
@ Configuration @ activerwebsecurity @ ComponentsCan ("org.baeldung.security") La classe publique SecurityConfig étend WebSecurityConfigurerAdapter {@autowired private customAuthenticationProvider AuthProvider; @Override Protected void configure (AuthenticationManagerBuilder Auth) lève l'exception {auth.AuthenticationProvider (AuthProvider); } @Override Protected void Configure (httpSecurity http) lève une exception {http.AuthorizERequests (). AnyRequest (). Authenticated () .and () .httpbasic (); }}Résumer
Ce qui précède est l'analyse du processus de vérification de Spring Security et les méthodes de vérification personnalisées qui vous sont présentées par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!