Directorio de artículos
Este artículo presenta principalmente cómo los usuarios implementan códigos de verificación y cómo esta función está conectada con Spring Gateway.
1. Lista de clases de función de código de verificación
amable | Función |
---|---|
CaptchaPropiedades | Configuración del código de verificación yml |
CaptchaConfig | Implementación específica de gráficos de códigos de verificación (hay 2 tipos: números y caracteres) |
Configuración de la función del enrutador | Definir rutas, que es una nueva forma de definir rutas relativas al controlador. |
ValidarCodeHandler | RouterFunction requiere HandlerFunction. función puente. |
ValidateCodeService、ValidateCodeServiceImpl | La lógica de implementación de la función del código de verificación (es decir, servicio, servicioImpl |
) | |
Validar filtro de código | Las solicitudes específicas requieren que se pasen códigos de verificación. |
De la lista de categorías anteriores, también podemos ver que la función del código de verificación incluye principalmente dos aspectos:
- Cómo implementar el código de verificación
Utilice principalmente kaptcha de Google para generar imágenes y utilice redis para lograr
Clases involucradas: CaptchaConfig, CaptchaProperties, ValidateCodeServiceImpl
- Cómo se conecta el código de verificación con los componentes de Spring Gateway
Esto está relacionado principalmente con el principio de funcionamiento de Spring Gateway. DispatcherHandler es la clase central de Spring Gateway y es responsable de distribuir las solicitudes. El principio es muy similar al DispatcherServlet de MVC, por lo que no lo discutiremos por ahora.
Las clases involucradas son: RouterFunctionConfiguration, ValidateCodeHandler, ValidateCodeFilter
2. Implementación del código de verificación.
2.1 Obtención del código de verificación
- Define la función de enrutamiento RouterFunction para obtener el código de verificación.
Función: en la fase de procesamiento de la solicitud, DispatcherHandler reenvía la solicitud a RouterFunctionMapping, y luego el procesador HandlerFunction se define en RouterFunction.
Proceso de procesamiento: servidor Servlet -> DispatcherHandler -> lista de handlerMapping -> un determinado RouterFunctionMapping -> según RouteFunction a la RouteFunction específica -> HandlerFunction -> Servicio -> ServiceImpl.
- HandlerFunction, el procesador que define el código de verificación
Función: Asociar RouteFunction y ValidateCodeService
- Define una clase de configuración de código de verificación CaptchaConfig
El inicio define la configuración de dos Beans, uno es un código de verificación de caracteres y el otro es un código de verificación numérico.
- Cómo generar código de verificación
Hay 2 tipos de códigos de verificación: uno es numérico y el otro es de caracteres.
1. Numérico: un método se usa para crear resultados matemáticos y el otro método se usa para crear imágenes.
2. Carácter: un método se usa para crear resultados matemáticos. resultados, y uno es la verificación de caracteres Método utilizado para crear la imagen
3. Almacenar en caché los resultados matemáticos en redis
- Devuelve las imágenes uuid y base64 del front-end
2.2 Verificación del código de verificación
- En el centro de configuración de nacos, solo se configura el filtro de código de verificación para el módulo de autenticación.
routes:
# 认证中心
- id: ruoyi-auth
uri: lb://ruoyi-auth
predicates:
- Path=/auth/**
filters:
# 验证码处理
- CacheRequestFilter
- ValidateCodeFilter
- StripPrefix=1
- Si la ruta coincide con la regla de predicado, se realiza el procesamiento de filtro.
Pregunta: Si hay varios procesadores, ¿cuál es el orden de ejecución?
Respuesta:
1. Primero busque la clase de regla de mapeo RoutePredicateHandlerMapping del procesador de aserciones.
2. El método lookupRoute en el método getHandlerInternal de esta clase decidirá qué ruta usar y la establecerá en el atributo de solicitud.
3. Luego, el método de controlador de FilteringWebHandler 4.
Método del controlador Obtenga los gatewayFilters y los globales globalFilters de la ruta y luego ordénelos en orden ascendente.
Adivine si los atributos de orden 1, 2 y 3 de los filtros de puerta de enlace de la ruta están ordenados según la configuración del centro de configuración . Cambie la configuración del centro de configuración y vuelva a depurar y observar. (La suposición es correcta)
- Problema de orden de filtro
La combinación de gatewayFilters se realiza en el orden de los archivos de configuración (el orden es 1, 2 y 3 en orden ascendente), y globalFilters también se clasifica en orden. Entonces, para el filtro de RuoYi el orden es:
AuthFilter(order=-200)
XssFilter(order=-100)
CacheRequestFilter(order=1)
ValidateCodeFilter(order=2)
StripPrefix(order=3)
3. Resumen
1. Cómo implementar el código de verificación.
Esta es una pregunta que los usuarios deben considerar. ¿Cómo implementar el código de verificación? Lo mejor es configurar diferentes códigos de verificación.
RuoYi implementa dos tipos de "código de verificación numérico" y "código de verificación de caracteres".
2. Cómo combinarlo con Spring Gateway:
este es un tema marco que los arquitectos deben considerar. Cómo combinar con Spring Gateway, qué módulos necesitan configurar este filtro, qué situaciones requieren códigos de verificación;
RuoYi está configurado con dos solicitudes del módulo de autenticación ["/auth/login", "/auth/register"] que requieren códigos de verificación.
4. Referencia de información
Dirección de notas de Yuque: https://www.yuque.com/yuchangyuan/tkb5br