[Análise do projeto RuoYi] Implementando a função de código de verificação no gateway RuoYi


Este artigo apresenta principalmente como os usuários implementam códigos de verificação e como essa função está conectada ao Spring Gateway.

1. Lista de classes de função de código de verificação

tipo Função
Propriedades Captcha Configuração yml do código de verificação
CaptchaConfig Implementação específica de gráficos de código de verificação (existem 2 tipos: números e caracteres)
RouterFunctionConfiguração Definir rotas, que é uma nova maneira de definir rotas relativas ao controlador.
ValidarCodeHandler RouterFunction requer HandlerFunction. função de ponte.
ValidateCodeService、ValidateCodeServiceImpl A lógica de implementação da função de código de verificação (ou seja, serviço, serviceImpl
ValidarCodeFilter Solicitações específicas exigem a transmissão de códigos de verificação.

Na lista das categorias acima, também podemos ver que a função do código de verificação inclui principalmente dois aspectos:

  • Como implementar o código de verificação

Use principalmente o kaptcha do Google para gerar imagens; e use redis para conseguir

Classes envolvidas: CaptchaConfig, CaptchaProperties, ValidateCodeServiceImpl

  • Como o código de verificação está conectado aos componentes do Spring Gateway

Isso está relacionado principalmente ao princípio de funcionamento do Spring Gateway. DispatcherHandler é a classe principal do Spring Gateway e é responsável pela distribuição de solicitações. O princípio é muito semelhante ao DispatcherServlet do MVC, então não discutiremos isso por enquanto.

As classes envolvidas são: RouterFunctionConfiguration, ValidateCodeHandler, ValidateCodeFilter

2. Implementação do código de verificação

2.1. Obtenção do código de verificação

  • Define a função de roteamento RouterFunction para obter o código de verificação

Função: No estágio de processamento da solicitação, a solicitação é encaminhada por DispatcherHandler para RouterFunctionMapping e, em seguida, o processador HandlerFunction é definido em RouterFunction.

Processo de processamento: Servidor Servlet -> DispatcherHandler -> lista handlerMapping -> um determinado RouterFunctionMapping -> de acordo com o RouteFunction para o RouteFunction específico -> HandlerFunction -> Service -> ServiceImpl.

  • HandlerFunction, o processador que define o código de verificação

Função: Associar RouteFunction e ValidateCodeService

  • Define uma classe de configuração de código de verificação CaptchaConfig

A inicialização define a configuração de dois Beans, um é um código de verificação de caracteres e o outro é um código de verificação numérico.

  • Como gerar código de verificação

Existem dois tipos de códigos de verificação: um é numérico e o outro é de caracteres.
1. Numérico: um método é usado para criar resultados matemáticos e um método é usado para criar imagens.
2. Caractere: um método é usado para criar códigos matemáticos. resultados, e um é a verificação de caracteres. Método usado para criar a imagem
3. Armazenar resultados matemáticos em cache no redis

  • Retorne as imagens uuid e base64 do front-end

2.2. Verificação do código de verificação

  • No centro de configuração do nacos, apenas o filtro de código de verificação é configurado para o módulo de autenticação.
      routes:
        # 认证中心
        - id: ruoyi-auth
          uri: lb://ruoyi-auth
          predicates:
            - Path=/auth/**
          filters:
            # 验证码处理
            - CacheRequestFilter
            - ValidateCodeFilter
            - StripPrefix=1
  • Se a rota corresponder à regra de predicado, o processamento do filtro será executado

Pergunta: Se houver vários processadores, qual é a ordem de execução?
Resposta:
1. Primeiro encontre a classe de regra de mapeamento RoutePredicateHandlerMapping do processador de asserção.
2. O método lookupRoute no método getHandlerInternal desta classe decidirá qual rota usar e configurá-la para o atributo de solicitação.
3. Em seguida, o método manipulador de FilteringWebHandler 4.
Método manipulador Obtenha os gatewayFilters e os globalFilters globais da rota e, em seguida, classifique-os em ordem crescente.

Adivinhe se os atributos de ordem 1, 2 e 3 dos gatewayFilters da rota estão classificados de acordo com a configuração do centro de configuração . Altere a configuração do centro de configuração, depure novamente e observe. (Acho que está correto)

  • Problema de ordem de filtro

A combinação de gatewayFilters está na ordem dos arquivos de configuração (a ordem é 1, 2 e 3 em ordem crescente) e globalFilters também é classificado na ordem de ordem. Então, para o filtro do RuoYi, a ordem é:

AuthFilter(order=-200)
XssFilter(order=-100)
CacheRequestFilter(order=1)
ValidateCodeFilter(order=2)
StripPrefix(order=3)

3. Resumo

1. Como implementar o código de verificação.
Esta é uma questão que os usuários precisam considerar. Como implementar o código de verificação? É melhor configurar diferentes códigos de verificação.

RuoYi implementa dois tipos de “código de verificação numérico” e “código de verificação de caractere”.

2. Como combinar com Spring Gateway:
Esta é uma questão de framework que os arquitetos precisam considerar. Como combinar com Spring Gateway; quais módulos precisam configurar esse filtro; quais situações exigem códigos de verificação;

RuoYi é configurado com duas solicitações do módulo de autenticação ["/auth/login", "/auth/register"] que requerem códigos de verificação.

4. Referência de informações

Endereço das notas de Yuque: https://www.yuque.com/yuchangyuan/tkb5br

Acho que você gosta

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