Problema @Interceptor

2 respostas
kivervinicius

Pessoal, estou seguindo a parte de interceptadores criei a annotation @Restrito fiz tudo certo a parte dos Interceptadores e me resulta esse erro

GRAVE: Exception starting filter vraptor
br.com.caelum.vraptor.VRaptorException: Annotation interface br.com.caelum.vraptor.Intercepts found in interface br.com.tga.vraptor.anotacoes.Restrito, but it is neither an Interceptor nor an InterceptorSequence.
	at br.com.caelum.vraptor.ioc.InterceptorStereotypeHandler.handle(InterceptorStereotypeHandler.java:52)
	at br.com.caelum.vraptor.ioc.spring.StereotypedBeansRegistrar.handleRefresh(StereotypedBeansRegistrar.java:63)
	at br.com.caelum.vraptor.ioc.spring.StereotypedBeansRegistrar.onApplicationEvent(StereotypedBeansRegistrar.java:46)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:294)
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:858)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:419)
	at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.start(SpringBasedContainer.java:106)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:87)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:295)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:422)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:115)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4072)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4726)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
	at org.apache.catalina.core.StandardService.start(StandardService.java:525)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
22/03/2012 17:27:09 org.apache.catalina.core.StandardContext start

Controller

@Put @Path("/produtos/{produto.id}")
	@Restrito
	public void altera(Produto produto) {
		dao.atualiza(produto);
		result.redirectTo(this).lista();
	}
	
	
	/* View */
	@Path("/produtos/novo")
	@Restrito
	public void formulario(){
	}
		
	@Get @Path("/produtos")
	@Restrito
	public List<Produto> lista() {
		return dao.listaTudo();
	}

Interceptador

package br.com.tga.vraptor.diversos;


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;
import br.com.tga.vraptor.anotacoes.Restrito;
import br.com.tga.vraptor.controller.UsuarioController;
import br.com.tga.vraptor.entidades.UsuarioWeb;


@Intercepts
public class AutorizacaoInterceptor implements Interceptor {
	private final UsuarioWeb usuario;
	private final Result result;

	public AutorizacaoInterceptor(UsuarioWeb usuario, Result result) {
		this.usuario = usuario;
		this.result = result;
	}

	@Override
	public boolean accepts(ResourceMethod method) {
		return !this.usuario.isLogado() && method.containsAnnotation(Restrito.class);
	}

	@Override
	public void intercept(InterceptorStack arg0, ResourceMethod arg1,
			Object arg2) throws InterceptionException {
		result.redirectTo(UsuarioController.class).loginForm();
		
	}
}

E Anotação

@Intercepts
@Retention(RetentionPolicy.RUNTIME) //a anotação vai ficar disponível em tempo de execucao
@Target(ElementType.METHOD) // anotação para métodos
public @interface Restrito {
	
}

2 Respostas

Rafael_Guerreiro

Tem que tirar aquele @Intercepts da anotação.

Ela fica só na classe que implementa Interceptor.

kivervinicius

Opa rafael, obrigadao, pensei que tinha visto na apostila que deveria colocar. obrigado

Criado 22 de março de 2012
Ultima resposta 23 de mar. de 2012
Respostas 2
Participantes 2