Segurança da primavera Lembre -se dos meus princípios básicos:
Ao fazer login, a solicitação é enviada ao filtro UsernamePassWordAuthenticationFilter. Quando o filtro for autenticado com sucesso, lembre -se de que o Service será chamado, que gerará um token, escreva o token no cookie do navegador. Ao mesmo tempo, há um tokenRepository no REMINKMERVICE, que grava as informações de token e usuário no banco de dados. Dessa forma, quando o usuário acessa o sistema novamente e acessa uma interface, ele passa por um filtro RememberMeauthenticationFilter. Ele lerá o token no biscoito e o entregará para lembrar o serviço. A RememMerService usará o TokenRepository para verificar se existem registros do banco de dados com base no token. Se houver um registro, o nome do usuário será retirado e ligue para o userDetailService para obter informações do usuário com base no nome do usuário e, em seguida, coloque -as no SecurityContext.
RememberMeAuthenticationFilter autentica a posição de filtro de segunda quinta da cadeia de filtro na segurança da primavera. Quando nenhum outro filtro de autenticação puder ser autenticado com sucesso, lembre -se do Filter Filter para experimentar a autenticação.
concluir:
1. Adicione <input type="checkbox" name="remember-me" value="true"/> ao formulário de login, SpringSecurity define uma constante na classe SpringSessionRememberMeServices , e o valor padrão é lembrar-me-me
2. De acordo com o diagrama esquemático acima, você precisa configurar o TokenRepository e armazenar o token gerado no banco de dados. Esta é uma configuração de feijão de configuração e colocada no BrowSerSecurityConfig
3. Configurar na configuração
4. Adicione o tempo de login automático à navegação para me tornar configurável
// Lembre -se de mim para configurar privado int lembreMeseconds = 10; Qihuo Package com.imooc.s@configuration // Esta é uma classe pública de configuração BrowSerSecurityConfig estende WebSecurityConfigureRAdApter Security {// Leia a página de login da Configuração do usuário @AUTERATETIDES SecurityPerts {/ // Processador personalizado após o login bem -sucedido @AUTOWIRED AUTHenticações privadas itoocauthenticationsCessHandler; // Processador personalizado após a autenticação falhada @aUTowired Private AuthenticationFailureHandler IMOOCAuthenticationFailureHandler; // fonte de dados @autowired private DataSource DataSource; @AUTOWIRED PRIVADO PRIVADO DE USERDETAILSERVICE USERDETAILSSERVICE; // Observe que ele é org.springframework.security.crypto.password.passwordEncoder @Bean public septandEncoder PasswordDencoder () {// bCryptPasswordEncoder implementa a senha de que a senhora retorna New BcryptPassworder (); } /*** Lembre -se da minha configuração TokenRepository, execute após o login com sucesso* Após o login com sucesso, salve o token no banco de dados* @Description: lembre -se da minha configuração TokenRepository* @param @return jdbcTokenRepositoryImpl* @returnSistEnTeTTELREPOSITID @Bean public persistentTokenRepository PersistentTokenRepository () {JdbcTokenRepositoryImpl jdbcTokenRepository = new JDBCTokenRepositoryImpl (); jdbctokenrepository.setDataSource (DataSource); // A tabela correspondente é gerada automaticamente na inicialização. Você pode executar o script create_table_sql em jdbctokenrepositoryImpl para gerar a tabela jdbctokenrepository.setCreateTableOnStartup (true); retornar jdbctokenRepository; } // Versão 2: página de login configurável @Override Protected void Configure (httpsecurity http) lança exceção {// Código de verificação filtro validateCodeFilter validateCodeFilter = new ValidAtecodeFilter (); // Use seu próprio manuseio de erros no código de verificação Filter validateCodeFilter.SetAuthenticationFailureHandler (IMOOCAuthenticationFailureHandler); // Código de verificação configurado Filtro de URL ValidAcodeFilter.SetSecurityProperties (SecurityProperties); validateCodeFilter.AfterPropertiESSET (); // Implementar o login de formulário de salto de interface que requer autenticação, segurança = autenticação + autorização //http.httpbasic () // Este é a caixa de pop-up padrão autenticação // http // carrega o filtro de código de verificação antes do filtro de login.AddfilterBefore (válido///) o filtro de uso de uso, usanEsteration, UsernomEntSeation, UserSenseTeation, UserSenseMation, UsernomEntEation Filtheration. Configuration.FormLogin () .LoginPage ("/Authentication/requer") // Processando a autenticação do usuário BrowSecurityController // Login Filter UsernamePasswordAthenticationFilter O URL de login padrão é "/login", que pode ser alterado aqui). .successHandler (imoocauthenticationsuccessHandler) // Autenticação personalizada pós -processador.failureHandler (IMOOCAuthenticationFailureHandler) // Processamento após o login falhado.and () // lembrete da minha configuração relacionada (). tokenValitySeconds (SecurityProperties.getBrowser (). GetRemEmberMeSeconds ()) // Lembre -me de segundos.UserDetailSService (UserDetailSService) // Lembre -se de que eu sou bem -sucedido, ligue para o UserDetails. SecurityProperties.getBrowser (). getLogInpage (): Login configurado do usuário página.antmatchers ("/autenticação/requer", securityproperties.getBrowser (). getLoginPage (), // salvar a página de login, mas não filtrar, caso contrário, um erro "/verifyCode/image (). //AnyRequest.authenticated () // autenticação é necessária autenticação.and () .csrf (). Desabille () // fechar a proteção do CSRF; }} curity.browser;Como você deseja lidar com o banco de dados, você precisa injetar uma fonte de dados: Application.properties
spring.dataSource.driver-class-name = com.mysql.jdbc.driverspring.dataSource.url = jdbc: mysql: //127.0.0.1: 3306/iMOOCDEMOSPRING.Datasource.Username = rootpring.datas
Inicie o aplicativo, acesse localhost: 8080/usuário, e o login é necessário
Login com sucesso:
Banco de dados: gerar uma tabela Persistent_logins e salve uma peça de dados
Pare o Serviço e inicie -o novamente (comente o jdbcTokenRepository.setCreateTableOnStartup(true); ) Como as informações de login de nossos usuários estão em sessão, depois de reiniciar o serviço, você deve ter reinicializado na página de login, mas porque configurei para lembrar de mim, posso acessar e obter diretamente os dados de interface.
Cabeçalho de solicitação:
Até agora, o Basic RememberMe foi feito
O código completo é colocado no github: https://github.com/lhy1234/spring-security
Resumir
O exposto acima é o Serviço de Resto de Construção de Segurança da Primavera que o editor apresentou a você. Lembre de mim. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!