VRaptor como definir qual Interceptor utilizar?

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 !

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/

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);

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 só 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 ?

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

Mais uma vez muito obrigado !

Vou reimplementar InterceptedBy, pois temos diversos interceptadores.

Ate mais, abraço !

se precisar de ajuda com isso dá um toque.