Spring Security Rappelez-vous mes principes de base:
Lors de la connexion, la demande est envoyée au filtre userAmPasswordAuthenticationFilter. Lorsque le filtre est authentifié avec succès, RememberMervice sera appelé, ce qui générera un jeton, écrivez le jeton dans le cookie du navigateur. Dans le même temps, il y a un tokenRepository dans RememberMerService, qui écrit les informations de jeton et d'utilisateur à la base de données. De cette façon, lorsque l'utilisateur accède à nouveau au système et accède à une interface, il passera à travers un filtre RememberAuthenticationFilter. Il lira le jeton dans le cookie et le remettra pour se souvenir. RememberService utilisera le tokenRepository pour vérifier s'il y a des enregistrements de la base de données basés sur le jeton. S'il y a un enregistrement, le nom d'utilisateur sera supprimé, puis appelez UserDetailService pour obtenir des informations utilisateur en fonction du nom d'utilisateur, puis mettez-les dans le SecurityContex.
RememberMeAuthenticationFilter authentifie la deuxième position filtrante de la chaîne de filtre dans la sécurité du printemps. Lorsqu'aucun autre filtre d'authentification ne peut être authentifié avec succès, RememberMeshenticationFilter sera appelé pour essayer l'authentification.
accomplir:
1. Ajouter <input type="checkbox" name="remember-me" value="true"/> au formulaire de connexion, SpringSecurity définit une constante dans SpringSessionRememberMeServices , et la valeur par défaut est Remember-Me
2. Selon le schéma ci-dessus, vous devez configurer le tokenRepository et stocker le jeton généré dans la base de données. Ceci est une configuration de configuration et placée dans le BrowserseSecurityConfig
3. Configurer dans Configurer
4. Ajouter le temps de connexion automatique aux BrowserProperties pour me rendre configurable
// N'oubliez pas que je configure private int reeatmeseconds = 10; package qihuo com.imooc.s@configuration // Il s'agit d'une configuration de classe publique BrowserseSecurityConfig étend WebSecurityConfigurerAdapter {// Lire la configuration de la page de connexion de la configuration de l'utilisateur @Autowired Private SecurityProperties SecurityProperties; // Processeur personnalisé après une connexion réussie @Autowired Private AuthenticationsUccessHandler ImoocAuthenticationsUCcessHandler; // Processeur personnalisé après authentification ratée @Autowired private AuthenticationFailureHandler imoocauthenticationFailureHandler; // Source de données @Autowired Private DataSource DataSource; @Autowired private userDetailSService UserDetailSService; // Notez qu'il s'agit d'org.springframework.security.crypto.password.password encoder @bean public passwordSpordorder PasswordDencoder () {// bCryptPasswordEncoder implémente le mot de passe encocheur new bcryptpasswordOder (); } / ** * N'oubliez pas ma configuration de tokenRepository, exécutez après la connexion avec succès * Après la connexion avec succès, enregistrez le jeton dans la base de données * @Description: Rappelez-vous ma configuration de tokenRopository * @param @return jdbctokenDepositoryImpl * @return persistantTenkeSitory * @throws * @Author lihaoyang * @Date March 5, 2018 * @throws * @AuThor lihaoyang * @date marche 5, 2018 * @Throws * @Autoror lihaoyang * @Date March 5, 2018 * @Throws * @Author lihaoyang * @Date March 5, 2018 * PersistantTokenRepository persistantTokenRepository () {jdbctokenRepositoryIMPl JDBCTokenRoSOSitory = new JDBCTokenRepositoryIMPl (); jdbctokenRepository.setDataSource (dataSource); // La table correspondante est automatiquement générée au démarrage. Vous pouvez exécuter vous-même le script create_table_sql dans jdbctokenRepositoryIMPl pour générer la table jdbctokenRepository.setCreateTableOnStartup (true); return jdbctokenRepository; } // Version 2: page de connexion configurable @Override Protected void configure (httpSecurity http) lève exception {// Code de vérification Filtre validateCodeFilter validateCodeFilter = new validateCodeFilter (); // Utilisez votre propre gestion des erreurs dans le filtre de code de vérification validatecodefilter.setAuthenticationFailureHandler (imoocauthenticationFailureHandler); // URL de filtre de code de vérification configuré ValidateCodeFilter.SetSecurityProperties (SecurityProperties); validateCodeFilter.AfterPropertiseSet (); // Implémentez la connexion du formulaire de saut d'interface qui nécessite l'authentification, la sécurité = authentification + l'autorisation //http.httpbasic () // Il s'agit de l'authentification par défaut de la boîte pop-up // http // Chargez le filtre de code de vérification avant le filter de connexion.AddFilterBefore.class) Configuration.FormLogin () .loginPage ("/ Authentication / require") // Traitement de l'utilisateur BrowserseSerSecurityController // Filtre de connexion UserNamepasswordAuthenticationFilter L'URL de connexion par défaut est "/ Login", qui peut être modifié ici.LoginProcessingurl ("/ Authentification / Form") .SuccessHandler (imoocautenticationscussHandler) // Authentification personnalisée postprocessor.failurehandler (imoocauthenticationfailurehandler) // traitement après la connexion a échoué.and () // rappelez-vous ma configuration connexe.rememberme () .TokenRepository (après le loure, le logement, le logement ()) // TokenRopository, tokenvaliditysecondes (securityproperties.getBrowser (). getRememberMesEconds ()) // Remember Me seconde.UserDetailSservice (UserDetailSService) // Rappelez-vous après avoir succédé, appelez UserDetailSservice pour interroger les informations de l'utilisateur // // Autoriser la logicielle. SecurityProperties.GetBrowser (). getLogInPage (): Page de connexion configurée par l'utilisateur.Antmatchers ("/ Authentication / Besoin", SecurityProperties.GetBrowser (). GetLoginPage (), // Enregistrer la page de connexion mais pas filter, sinon une erreur "/ VerifyCode / image"). //AnyRequest.Authenticated () // Authentification L'authentification est requise.and () .csrf (). Disable () // Close Csrf Protection; }} currity.browser;Étant donné que vous souhaitez gérer la base de données, vous devez injecter une source de données: application.properties
printemps.datasource.driver-class-name = com.mysql.jdbc.driverspring.datasource.url = jdbc: mysql: //127.0.0.1: 3306 / imooc-demospring.datasource.username = rootsPring.datasource.password = rootword = rootword = rootword = rootword = rootword = rootword = root
Démarrer l'application, accéder à LocalHost: 8080 / utilisateur, et la connexion est requise
Connectez-vous avec succès:
Base de données: générer une table persistante_logins et enregistrer un morceau de données
Arrêtez le service et recommencez (commentez le jdbcTokenRepository.setCreateTableOnStartup(true); ) Parce que nos informations de connexion utilisateur sont en session, après avoir redémarré le service, vous devez avoir redémarré la page de connexion, mais parce que j'ai configuré pour me souvenir de moi, je peux accéder directement et obtenir les données d'interface.
En-tête de demande:
Jusqu'à présent, le RememberMe de base a été fait
Le code complet est placé dans GitHub: https://github.com/lhy1234/spring-security
Résumer
Ce qui précède est le Spring Security Construction Rest Service que l'éditeur vous a présenté. Souviens-toi de moi. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!