Spring Security implementa código de verificación gráfica (1)

        Antes de verificar el nombre de usuario y la contraseña, la introducción de la verificación auxiliar puede prevenir de manera efectiva la prueba y el error de fuerza bruta, y el código de verificación gráfica es un método de verificación auxiliar simple y efectivo. A continuación, utilizaremos dos métodos de filtro y autenticación personalizada para realizar la función de código de verificación gráfica.

1. Usa filtros para implementar códigos gráficos de verificación

        El nombre completo del código de verificación ( CAPTCHA ) es Prueba de Turing pública completamente automatizada para diferenciar a las computadoras y los humanos , que se traduce como "Prueba de Turing completamente automatizada para distinguir a las computadoras y los humanos". En términos sencillos, el código de verificación está configurado para evitar que los usuarios maliciosos vuelvan a intentarlo de forma violenta. Independientemente del registro del usuario, el inicio de sesión del usuario o la publicación en el foro, si no hay restricciones, una vez que algunos usuarios maliciosos usan la computadora para iniciar intentos infinitos, es fácil dañar el sistema.

1.1 Filtro personalizado:

En Spring Security , hay muchas formas de implementar la verificación del código de verificación. La forma más fácil es personalizar un filtro que maneje la lógica del código de verificación y agregarlo a la posición adecuada de la cadena de filtros de Spring Security . Cuando la solicitud de inicio de sesión coincida, el código de verificación se verificará de inmediato, si tiene éxito, se liberará y, si falla, la solicitud de verificación completa se cancelará por adelantado.

        Hablando de filtros Spring Security , revisemos la configuración que usamos anteriormente.

protected void configure(HttpSecurity http) throws Exception{
		http.authorizeRequests().
			antMatchers("/admin/api/**").hasRole("ADMIN").
			antMatchers("/user/api/**").hasRole("USER").
			antMatchers("/app/api/**").permitAll().
			anyRequest().authenticated().
		and().csrf().disable()
			.formLogin()
		.and()
			.sessionManagement().maximumSessions(1);

	}

        HttpSecurity en realidad está configurando la cadena de filtros de Spring Security , como CSRF , CORS , formulario de inicio de sesión, etc., y cada configurador corresponde a un filtro. Podemos configurar el comportamiento del filtro a través de HttpSecurity , e incluso cerrar el filtro directamente como CRSF . Por ejemplo, Gestión de sesiones .

public SessionManagementConfigurer<HttpSecurity> sessionManagement() throws Exception {
		return getOrApply(new SessionManagementConfigurer<HttpSecurity>());
	}

        Spring Security configura el comportamiento de SessionManagement a través de SessionManagementConfigurer . Configuradores similares a SessionManagementConfigurer incluyen CorsConfigurer , RememberMeConfigurer , etc., todos los cuales implementan la interfaz estándar de SecurityConfigurer .

public interface SecurityConfigurer<O, B extends SecurityBuilder<O>> {
    // 各个配置器的初始化方法
    void init(B builder) throws Exception;
    // 各个配置器被统一调用的配置方法
    void configure(B builder) throws Exception;

}

        SessionManagementConfigurer implementa la gestión de sesiones insertando el SessionManagementFilter final en la cadena de filtros en el método de configuración .

public void configure(H http) throws Exception {
		SecurityContextRepository securityContextRepository = http
				.getSharedObject(SecurityContextRepository.class);
        // 初始化 SessionManagementFilter
		SessionManagementFilter sessionManagementFilter = new SessionManagementFilter(
				securityContextRepository, getSessionAuthenticationStrategy(http));
		if (this.sessionAuthenticationErrorUrl != null) {
			sessionManagementFilter.setAuthenticationFailureHandler(
					new SimpleUrlAuthenticationFailureHandler(
							this.sessionAuthenticationErrorUrl));
		}
		InvalidSessionStrategy strategy = getInvalidSessionStrategy();
		if (strategy != null) {
			sessionManagementFilter.setInvalidSessionStrategy(strategy);
		}
		AuthenticationFailureHandler failureHandler = getSessionAuthenticationFailureHandler();
		if (failureHandler != null) {
			sessionManagementFilter.setAuthenticationFailureHandler(failureHandler);
		}
		AuthenticationTrustResolver trustResolver = http
				.getSharedObject(AuthenticationTrustResolver.class);
		if (trustResolver != null) {
			sessionManagementFilter.setTrustResolver(trustResolver);
		}
		sessionManagementFilter = postProcess(sessionManagementFilter);
        // 将 SessionManagementFilter 添加到过滤器上
		http.addFilter(sessionManagementFilter);
		if (isConcurrentSessionControlEnabled()) {
			ConcurrentSessionFilter concurrentSessionFilter = createConccurencyFilter(http);

			concurrentSessionFilter = postProcess(concurrentSessionFilter);
			http.addFilter(concurrentSessionFilter);
		}
	}

        Además de los filtros proporcionados por Spring Security , también podemos agregar nuestros propios filtros para lograr más funciones de seguridad, que se pueden implementar en HttpSecurity .

1.2 Filtro captcha gráfico:

        Indudablemente, para poder realizar la función de verificación del código gráfico de verificación, primero debería haber una API para obtener el código gráfico de verificación . Hay muchas maneras de dibujar un código de verificación gráfico, solo use un componente de código de verificación de código abierto, como kaptcha .

Supongo que te gusta

Origin blog.csdn.net/xhf852963/article/details/123915398
Recomendado
Clasificación