[Análisis del proyecto RuoYi] Implementación de la función de código de verificación en la puerta de enlace RuoYi


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

Supongo que te gusta

Origin blog.csdn.net/yuchangyuan5237/article/details/133473573
Recomendado
Clasificación