Diretório de artigos
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