Migrando VRaptor2 para o VRaptor3 - Interceptors

3 respostas
N

Olá, tenho um sistema que utiliza VRaptor2 e estou tentando migrar o mesmo para o VRaptor3, porém estou com dificuldades na migração de um interceptor de usuários, que verifica a permissão e etc… alguém tem algum exemplo, o do site não ficou muito claro para mim.

Obrigado.

3 Respostas

Lucas_Cavalcanti

Olá Nicko,

no VRaptor2 você tinha:

public class MeuInterceptor implements org.vraptor.Interceptor {
    public void intercept(LogicFlow flow) {
        // lógica de autenticacao
        flow.execute();
    }
}

E em toda classe vc tinha que fazer um @InterceptedBy(MeuInterceptor.class)

no VRaptor3, é só você trocar o flow.execute() pelo stack.next(…), e implementar o método accepts pra saber quais classes
seriam interceptadas:

@Intercepts
public class MeuInterceptor implements br.com.caelum.vraptor.interceptor.Interceptor {
   public boolean accepts(ResourceMethod method) {
         // alguma lógica com o método (method.getMethod()) ou com a classe (method.getResourceClass().getType()) 
        // pra saber se ela vai ser interceptada algo como:
        return !method.getResourceClass().getType().equals(MinhaLogicaDeLoginController.class);
   }
   
   public void intercept(InterceptorStack stack, ResourceMethod method, Object instance) {
         //logica de autenticação
        stack.next(method, instance);
   }
}

vou mudar a documentação, obrigado

[]'s

Y

No meu projeto do Vraptor2 que eu tinha eu colocava o @InterceptedBy(MeuInterceptador.class) no metódo e não na classe. Como fica com o VRaptor3?

Lucas_Cavalcanti

você pode criar uma anotação simples:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MinhaFeature {
}

e no seu interceptor vc vai implementar o accepts da seguinte maneira:

@Intercepts
public class MinhaFeatureInterceptor implements Interceptor {
    
     //...
     public boolean accepts(ResourceMethod method) {
         return method.containsAnnotation(MinhaFeature.class);
     }
}

nos métodos que vc quiser interceptar é só anotar o método ou a classe com @MinhaFeature

Criado 30 de agosto de 2009
Ultima resposta 3 de fev. de 2010
Respostas 3
Participantes 3