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.