Um problema,
Em Zuul uso real encontrado um problema quando endereço de encaminhamento não pode alcançar, Zuul Filtro lance jogou exceção, protegendo o erro real.
Ao ler o código fonte disponível, exceção Zuul ZuulException será lançada, será encapsulado dentro de RuntimeException.
necessidade Throwable para captura de uso interceptores.
Pergunta dois,
O código acima derivada com.netflix.zuul.http.ZuulServlet
do service
método de aplicação que define o processamento quando Zuul processo de solicitao externa, a lógica de execução de cada tipo de filtro. Podemos ver os três códigos de try-catch
blocos, que por sua vez representam a pre
, route
, post
três estágios de chamadas de filtro, no catch
processamento de exceção, podemos ver que eles são todos os error
tipos de processo de filtro (antes de usar error
filtros excepção uniforme definido manipulação também aproveitar esta característica); error
depois do tipo de filtro processado, para além do post
lado de fora da fase anormal, irá em seguida ser post
tratada filtro. Para o post
filtro excepção caso projectado através do error
processamento após filtro, nenhum outro tipo de filtro para assumir a presença das causas de deficiências no programa antes de o utilizar é.
Lembre-se que dois tipos de métodos de manipulação de exceção Antes da implementação, em que o próprio cerne da questão, estes dois métodos de tratamento no contexto da exceção manipulação tempo pedido para adicionar uma série de error.*
parâmetros e esses parâmetros onde o trabalho real está na post
fase de SendErrorFilter
no filtro de parâmetros será usado para organizar a parte de trás conteúdo para o cliente. Quanto ao post
caso de fase lançar uma exceção por error
não chamar após filtro de processamento de post
fase pedido, é claro, estes error.*
parâmetros não será SendErrorFilter
a saída do consumidor. Então, se temos o costume de post
filtro quando não lidar correctamente com a exceção, ainda é provável que apareça no registro e nenhuma resposta anormal a um pedido é questão vazio. Podemos modificar antes ThrowExceptionFilter
da filterType
modificação é post
para verificar a existência deste problema, preste atenção para remover o try-catch
bloco de processamento, ele pode lançar uma exceção.
Para resolver os problemas acima, existem muitos, como o mais direto que podemos conseguir error
quando os resultados do filtro são devolvidos diretamente para a organização será capaz de alcançar o efeito, mas essas deficiências são óbvias, para os códigos de organização e informações de erro devolvidas alcançá-lo haverá várias cópias, isso é muito difícil para o nosso futuro trabalho de manutenção de código. Portanto, a fim de manter a lógica de processamento de retorno de exceção consistente, nós ainda esperança será post
uma exceção para ser capaz de filtro jogado SendErrorFilter
ao punho.
No anterior, obtivemos uma ErrorFilter
capturados pre
, route
, post
filtro jogado de excepção, e tecidos error.*
parâmetros dentro do contexto do pedido. Desde o nosso objetivo é seguir SendErrorFilter
, esses error.*
parâmetros ainda são úteis para nós, para que possamos continuar a usar o filtro para fazê-lo na post
hora de jogar um filtro de exceção, continuar a organizar error.*
parâmetros, mas aqui não podemos ter esses error.*
parâmetros antes de ser passado para SendErrorFitler
filtro é de se lidar. Então, precisamos ErrorFilter
redefinir o filtro depois de um error
tipo de filtro, deixá-lo vir para perceber SendErrorFilter
a função, mas o error
filtro não precisa lidar com todas as circunstâncias incomuns, é apenas post
uma exceção foi lançada filtro eficaz. De acordo com as idéias acima, podemos criar uma classe que herda SendErrorFilter
o filtro, pode reutilizar run
método e, em seguida, reescrevê-lo com o tipo, ordem e condições de execução, para atingir multiplexagem da lógica original, especificamente implementada como segue:
https://www.cnblogs.com/duanxz/p/7543040.html