Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente de Spring Security (1): autenticación, autorización, cadena de filtro

Código fuente de Spring Security (1): autenticación, autorización, cadena de filtro

Debido a que leí muchos blogs y descubrí que muchas personas tienen diferentes estilos de uso, estaba un poco confundido. Creo que la mejor manera es leer más código fuente y luego elegir cómo quieres usarlo.

Versión de seguridad de Spring: 2.1.6.RELEASE

Hablemos primero de la relación entre estos tres tipos

AutenticationManager, ProviderManager, AuthenticationProvider

Encapsula información de identidad del usuario

Una interfaz, solo un método

ProviderManager es la clase de implementación de AuthenticationManager, que proporciona un proceso y una lógica de implementación de autenticación básica;

Ver primero Este método es un método utilizado para la autenticación

Puntos clave

AuthenticationProvider en sí es una interfaz, que tiene la clase de implementación AbstractUserDetailsAuthenticationProvider y la subclase DaoAuthenticationProvider de AbstractUserDetailsAuthenticationProvider

Sólo dos métodos

Resumen

Esta es una clase abstracta y un patrón de plantilla. Después de definir el proceso de autenticación, implementemos algunos métodos de enlace en el proceso. Se logró el efecto de autenticación personalizada

La subclase de AbstractUserDetailsAuthenticationProvider implementa algunos métodos abstractos

retrieveUser

Utiliza principalmente UserDetailsService para encontrar usuarios

adicionalAuthenticationChecks

createSuccessAuthentication

La esencia es llamar al método de la clase principal, que consiste en crear una nueva autenticación y luego pasarle la información UserDetails

UserDetailsService es una interfaz que proporciona un método

Siento que esta interfaz es inútil. Se utiliza para administrar clases de usuarios.

SS funciona en segundo plano http basándose principalmente en filtros de servlet. Echemos un vistazo a qué es el filtro y cómo funciona en los servlets.

springSecurityFilterChain es una interfaz, DefaultSecurityFilterChain es su clase de implementación y hay una lista de filtros dentro de DefaultSecurityFilterChain. Con respecto a los filtros en SS y su orden de ejecución (Orden), puede ver la documentación oficial cuando. necesario Se utilizará al definir el filtro.

Cuando llega una solicitud, el filtro en SS actuará sobre la solicitud, como se muestra a continuación:

Arriba mencionamos que SS tiene su propia cadena de filtros, aquí hay una captura de pantalla: (El orden de ejecución es el de el orden establecido)

Hablemos de la lógica de procesamiento de varios filtros más importantes

Todo el proceso de llamada consiste en llamar primero al método AbstractAuthenticationProcessingFilter.doFilter() de su clase principal y luego ejecutarlo. UsernamePasswordAuthenticationFilter. método tryAuthentication() para verificación

La clase principal es AbstractAuthenticationProcessingFilter (también es un modo de plantilla, la subclase implementa métodos abstractos y la clase principal determina el proceso)

requireAuthentication

Determinar si se requiere el procesamiento del filtro actual es determinar la ruta, el método de solicitud, etc.

Tome el método de construcción de UsernamePasswordAuthenticationFilter como ejemplo

SuccessAuthentication

La autenticación aquí es el primer contenido de la sección (this.getAuthenticationManager().authenticate(authRequest))

Como se puede ver en el diagrama de secuencia de ejecución del filtro en lo anterior. En la figura, el filtro AnonymousAuthenticationFilter está después de filtros como UsernamePasswordAuthenticationFilter. Si está al frente Ninguno de los filtros se autenticó correctamente. Spring Security agregó una clase de implementación anónima AnonymousAuthenticationToken de Authenticaiton al SecurityContextHolder actual. p>

Filtro de manejo de excepciones ExceptionTranslationFilter, que se utiliza Maneja las excepciones lanzadas durante el proceso de autorización del certificado del sistema (es decir, el siguiente filtro FilterSecurityInterceptor), que maneja principalmente AuthenticationException y AccessDeniedException.

Este filtro es el último filtro en la cadena de filtros de autenticación y autorización. Después de este filtro, se solicita el servicio /xx real.

Spring Security utiliza AffirmativeBased de forma predeterminada para implementar la decisión. método de AccessDecisionManager Para lograr la autorización

Vaya a esta ubicación para autenticar la información del usuario actual, fl la ruta del recurso al que se accede actualmente y atribuye la decisión de la ruta del recurso actual (es decir, si se requiere autenticación). El resto es determinar si el rol del usuario actual Authentication.authorites tiene permiso para acceder al recurso actual fi

Análisis de la cadena de filtros centrales de Spring Security