Anotação / intercept com vraptor

6 respostas
M

Pessoal seguinte criei uma anotação com objetivo de anotar somente classes de controller, mas a anotação @Authentication não esta entrando no método

public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance)
            throws InterceptionException {

Declaração da anotação

package teste.intercepts;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Authentication {

}

abs

6 Respostas

Lucas_Cavalcanti

se vc quer anotar método precisa colocar também no @Target o valor ElementType.METHOD

M

Bom dia Lucas o objetivo é anotar somente a Classe do controlador, mas não esta entrando no método intercept.

valeu

Lucas_Cavalcanti

como está o método accept?

M

ele não entra no método intercept, teria outra forma de debugar isto?

abs

package teste.intercepts;

import teste.controllers.LoginController;
import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.resource.ResourceMethod;

@Intercepts
public class AuthorizationInterceptor implements Interceptor {

	private final UserInfo userInfo;
	private final Result result;

	public AuthorizationInterceptor(UserInfo userInfo, Result result) {
		this.userInfo = userInfo;
		this.result = result;
	}

	@Override
	public boolean accepts(ResourceMethod method) {
		return method.containsAnnotation(Authentication.class);
	}

	@Override
	public void intercept(InterceptorStack stack, ResourceMethod method,
			Object resourceInstance) throws InterceptionException {
		
		System.out.println(userInfo.getUser() + " << entrou");
		
		if (userInfo.getUser() == null) {
			result.include("error", "Acesso negado.");
			result.redirectTo(LoginController.class).index();
		} else {
			stack.next(method, resourceInstance);
		}

	}

}
Lucas_Cavalcanti

method.containsAnnotation não verifica se tem a anotação na classe (bizarro, eu sei)

faça:

method.getResource().getType().isAnnotationPresent(Authentication.class);
M

Vivendo e aprendendo :slight_smile:

obrigado.

Criado 4 de outubro de 2011
Ultima resposta 5 de out. de 2011
Respostas 6
Participantes 2