queria fazer um controle de acesso na aplicação do goodbuy…
Estava pensando em fazer o interceptador tipo
@RestritoAdmin
além do @Restrito que já tem…
então, uma aplicação ´so pode ter 1 interceptador?
Posso criar outro ou da algum conflito ou algo do tpw?
Se não for possível fazer assim,
vou jogar um atributo no usuarioWeb q retorna o perfil do cara,
e nos
<c:if test> eu jogo a condição lá…
mas acho q ficaria mais elegante com as anotações.
(E mais facil de dar manutencao tb)
abraços
opa…
.da certo sim
pra quem interessar:
package br.loja.modelo;
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.loja.control.UsuariosController;
@Intercepts
public class AcessoInterceptor implements Interceptor {
private final UsuarioWeb usuario;
private final Result result;
public AcessoInterceptor(UsuarioWeb usuario, Result result) {
this.usuario = usuario;
this.result = result;
}
public boolean accepts(ResourceMethod method) {
return !usuario.isAdmin() && method.containsAnnotation(RestritoAdmin.class);
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object resourceInstance) throws InterceptionException {
result.redirectTo(UsuariosController.class).error();
}
}
Interface:
package br.loja.modelo;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) //a anotação vai ficar disponível em tempo de execucao
@Target(ElementType.METHOD) // anotação para métodos
public @interface RestritoAdmin {
}
método:
@RestritoAdmin
@Restrito
@Get @Path("/produtos/novo")
public void form(){
}