VRaptor como definir qual Interceptor utilizar?

6 respostas
Milton_Quirino

No sistema em que trabalho utilizamos VRaptor 2, nele possuímos diversos interceptadores (por exemplo : DaoInterceptor, LoginInterceptor, PermissaoInterceptor), para utilizar é facil basta usar @InterceptedBy({PermissaoInterceptor.class}) ou @InterceptedBy({PermissaoInterceptor.class, DaoInterceptor.class, OutroInterceptor}) .

Agora vem a minha dúvida, como que faço no VRaptor 3 para chamar o Interceptor que desejo, vamos dizer que quero chamar so o LoginInterceptor como faria ?

Obrigado galera !

6 Respostas

Lucas_Cavalcanti

no vraptor 3 a gente inverteu esse controller do interceptor…

agora a gente faz isso no método accepts da interface Interceptor…

mais info:
http://vraptor.caelum.com.br/pt/docs/interceptadores/

vininewday

No VRaptor 3 você cria um interceptador utilizando a anotação @Intercepts e implementa a interface Interceptor.

Então irá sobrescrever dois métodos:

public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) - Que executará a lógica recebendo como parâmetros:

stack - É como se fosse o chain de um WebFilter.
method - Método do controller requisitado.
instance - Controller que está processando a requisição

public boolean accepts(ResourceMethod method)

method - Método do controller requisitado.

É dentro deste método (accepts) que você faz a verificação se o método recebido por parâmetro contém a REGRA para determinado Controller.

Sendo que você pode criar uma anotação para cada método que determinado Interceptador necessite.

Ou utilizar o método do ResourceClass, isAssignableForm para permitir a interceptação apenas de um determinado Controller, como abaixo:

ResourceClass resource = method.getResource(); return resource.getType().isAssignableFrom(LoginController.class);

Milton_Quirino

Obrigado por me responder pessoal =)

Quando receber uma solicitação antes de chegar na controller sempre irá entrar em todos os interceptadores antes ? Por exemplo possuo os três interceptadores a cima, irá entrar em cada um deles e verificar se tem alguma regra que impeça de proceguir ?

Então  confirmando, dentro do metodo accepts da interface Interceptor irei verificar de qual controller veio e com isso chamar as respectivas regras, cada vez que criar um novo controller terei que inclui-lo nas regras do meu accepts ?
Lucas_Cavalcanti

Isso…

mas tem jeitos melhores de fazer isso também…

se quase todos ou todos os controllers tem que passar pelo interceptor, vc pode implementar o accepts para retornar false parar controllers determinados e true pra todo o resto

e vc pode criar uma anotação para fazer esse trabalho melhor também… se eu não me engano tem algo sobre isso na apostila do VRaptor:
http://caelum.com.br/curso/fj28

se vc quiser dá até pra reimplementar o InterceptedBy do vraptor 2, não é muito difícil

Milton_Quirino

Mais uma vez muito obrigado !

Vou reimplementar InterceptedBy, pois temos diversos interceptadores.

Ate mais, abraço !

Lucas_Cavalcanti

se precisar de ajuda com isso dá um toque.

Criado 26 de fevereiro de 2013
Ultima resposta 26 de fev. de 2013
Respostas 6
Participantes 3