Seguridad de primavera Recuerde mis principios básicos:
Al iniciar sesión, la solicitud se envía al filtro UserNamePassWordAuthenticationFilter. Cuando el filtro se autentique con éxito, se llamará a RememberMeservice, que generará un token, escriba el token a la cookie del navegador. Al mismo tiempo, hay un tokenRepository en RememberMeservice, que escribe el token y la información del usuario en la base de datos. De esta manera, cuando el usuario accede nuevamente al sistema y accede a una interfaz, pasará a través de un filtro RemembleMeauticationFilter. Leerá el token en la galleta y la entregará para recordar el servicio. Rememberservice usará el tokenRepository para verificar si hay registros de la base de datos basado en el token. Si hay un registro, se eliminará el nombre de usuario y luego llame a UserDetailService para obtener información del usuario en función del nombre de usuario, y luego colocarlo en el SecurityContext.
RememberMeAuthenticationFilter autentica la segunda posición del filtro de la cadena de filtro en la seguridad de los primavera. Cuando ningún otro filtro de autenticación se puede autenticar con éxito, se llamará a RememberMeauthenticationFilter para probar la autenticación.
lograr:
1. Agregar <input type="checkbox" name="remember-me" value="true"/> Para el formulario de inicio de sesión, SpringSecurity define una constante en SpringSessionRememberMeServices , y el valor predeterminado es recordarme
2. Según el diagrama esquemático anterior, debe configurar el tokenrepository y almacenar el token generado en la base de datos. Esta es una configuración de configuración de frijol y se coloca en el navegador.
3. Configurar en Configurar
4. Agregue tiempo de inicio de sesión automático a BrowserProperties para hacerme configurable
// Recuerda que configurarme privado int recordMeseConds = 10; el paquete Qihuo com.imooc.s@configuration // Esta es una configuración de clase pública BROWSERSECURITYCONFIG EXTENGA LA SEGURIDAD DE LA SEGURIDAD DE LA SECURIDAD DE LA SEGURIDAD DE LA SEGURIDAD DE LA SEGURIDAD DE LA SEGURIDAD DE LA SEGURIDAD DE LA SEGURIDAD DE LA SEGURIDAD DE LA SEGURIDAD PRIVADA PROPERTIES; // procesador personalizado después de inicio de sesión exitoso @autewired private autenticationsuccesshandler imoutenticationsuccessHandler; // procesador personalizado después de la autenticación fallida @autewired private privado autenticación privada Mandler IMOOCAUTAUTHENTICACIÓNFAILUREHANDLER; // fuente de datos @autewired DataSource DataSource; @AUTOWIREDIREDIREDEDREDEDREDEDETAILSSERVICE USERDETAILSSERVICE; // Tenga en cuenta que es org.springframework.security.crypto.password.passwordEncoder @Bean public PasswordEncoder PasswordDenCoder () {// bcRyptPassPassWordEncoder implementa contraseña de contraseña devolver nuevo bcRyptPassPassWordEder (); } / *** Recuerde mi configuración de tokenRepository, ejecute después de iniciar sesión con éxito* Después de iniciar sesión con éxito, guarde el token en la base de datos* @Description: recuerde mi configuración de tokenRepository* @param @return jdbctokenRepositoryIm* @retretententRepository* @throws* @author liHhaoyang* @Date marzo* @@return @Bean March 5, 2018* PersistentTokenRepository PersistentTokenRepository () {JDBCTOKenRepositoryImpl JDBCTOKenRepository = new JDBCTOKenRepositoryImpl (); jdbcTokenRepository.SetDataSource (DataSource); // La tabla correspondiente se genera automáticamente al inicio. Puede ejecutar el script create_table_sql usted mismo en jdbctokenRepositoryImpl para generar la tabla jdbctokenRepository.setCreateTableOnStartUp (true); return jdbcTokenRepository; } // Versión 2: Página de inicio de sesión configurable @Override Proteged void Configure (httpsecurity http) lanza la excepción {// filtro de código de verificación ValidAteCodeFilter ValidAteCodeFilter = new ValidateCodeFilter (); // Use su propio manejo de errores en el filtro de código de verificación ValidAteCodeFilter.SetAuthenticationFailureHandler (iMoOCAuthenticationFailureHandler); // Código de verificación configurado URL de filtro ValidAteCodeFilter.SetSecurityProperties (SecurityProperties); validateCodeFilter.AfterPropertiesSet (); // Implementar el inicio de sesión de formulario de salto de interfaz que requiere autenticación, seguridad = autenticación + autorización //http.httpbasic () // Este es el cuadro emergente predeterminado autenticación // http // cargar el código de verificación del filtro antes del filtro de inicio de sesión. Configuration.FormLogin () .loginPage ("/autenticación/requisito") // Procesamiento de la autenticación de usuario BrowserseCurityController // Filtro de inicio de sesión UserNamePassWderAuthenticationFilter La url de inicio de sesión predeterminada es "/login", que se puede cambiar aquí. .SuccessHandler (IMOOCAUTHENTATIONACECESSHANDLER) // Autenticación personalizada PostProcessor.FailureHandler (iMoOCAuthenticationFailureHandler) // Processing After Login falló.and () // Recuerde mi configuración relacionada. TokenValiditySeconds (SecurityProperties.getBrowser (). GetRememberMesEconds ()) // Recuerde Seconds.UserDetailsService (UserDetailsService) // recuerde después de que tengo éxito, llame a UserDetailsService a consulta información del usuario.and () // autorizar la configuración relacionada. SecurityProperties.getBrowser (). getLoginPage (): el usuario de inicio de sesión configurado.antMatchers ("/autenticación/requisito", SecurityProperties.getBrowser (). GetLoginPage (), // Guardar la página de inicio de sesión pero no filtrar, de lo contrario un error "/Verifycode/Image"). //AnyRequest.authenticated () // Se requiere autenticación de autenticación. }} curity.browser;Dado que desea tratar con la base de datos, debe inyectar una fuente de datos: Application.Properties
spring.datasource.driver-class-name = com.mysql.jdbc.driverspring.dataSource.url = jdbc: mysql: //127.0.1: 3306/imooc-dimospring.dataSource.useName = rootspring.datasource.password = roader = road
Inicie la aplicación, acceda a localhost: 8080/usuario e inicio de sesión es necesario
Iniciar sesión con éxito:
Base de datos: generar una tabla persistente_logins y guarda un dato
Detenga el servicio y comience nuevamente (comente el jdbcTokenRepository.setCreateTableOnStartup(true); ) Debido a que nuestra información de inicio de sesión del usuario está en sesión, después de reiniciar el servicio, debería haber reiniciado a la página de inicio de sesión, pero porque he configurado para recordarme, puedo acceder directamente y obtener los datos de la interfaz.
Encabezado de solicitud:
Hasta ahora, el recuerdo básico se ha hecho
El código completo se coloca en Github: https://github.com/lhy1234/spring-security
Resumir
Lo anterior es el servicio de descanso de construcción de seguridad de primavera que el editor le presentó. Acuérdate de mí. Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!