Minha contribuição - Controle de acesso VRaptor 3

não “extranho” com X - risos. ainda bem que resolveu !

fabio.cbrandao

Teu conctrole de usuário, pega no banco a permisão e o caminho do roles ?

vlw


Tenta atualizar o paranamer.jar

Tenta atualizar o paranamer.jar

[quote=juniorsatanas]fabio.cbrandao

Teu conctrole de usuário, pega no banco a permisão e o caminho do roles ?

vlw[/quote]

Junior,

Meu controle de usuário pega a permissão do usuário assim que ele efetua o login no sistema…

não entendi a pergunta na parte do caminho de roles…?

[quote=Leandro-SP]java.lang.NoClassDefFoundError: com/thoughtworks/paranamer/AnnotationParanamer

Tenta atualizar o paranamer.jar[/quote]

É o problema foi solucionado troquei a versão do paranamer-1.5.jar para o paranamer-2.2.jar

Opa! Td certo pessoal?
Tô procurando a dica para redirecionar o usuário para a Home caso ele ainda esteja logado, o lance é que eu chamei a index e ela aparareceu, toda zicada, pq o usuário logado possui outro css, então para os recursos/métodos que não tenham restrição seria legal mandar o usuário logado para a Home, alguém têm essa resposta?
Abraço!!

Guevara,

Não entendi direito mas vc quer direcionar o usuário logado para a home quando ele tentar acessar algum método q não tenha permissão? Se for isso anote o seu método Home com

@AccessDeniedPage
public void home() {
}

Oi Fabio!
O problema não é a home, é a index, pois os métodos restritos podem ser anotados para restringir para determinados usuários o acesso. Mas os métodos sem anotação acessados por usuários não logados podem ser acessados tb pelos usuários logados, o problema é que a página é aberta toda zicada, pois o css do usuário logado é diferente dos usuários visitantes.Exemplo:

@Roles(admin)
public void lista() {
}

public void listaVenda() {
}

Repare que o listaVenda tb pode ser acessado pelo admin, mas a página virá com css referente a visitantes e não css do admin.
Como eu estou usando Sitemesh, o decorador de listaVenda() é diferente do lista(). Pra mim o redirecionamento do admin para a home ao acessar a index já tava bom.

Abraço!

@Roles(roles = {"admin"})
public void lista() {   
}   
  
public void listaVenda() {   
   if(usuarioLogado.getUsuario() != null)
      result.use(Results.logic()).redirectTo(MeuController.class).lista();	
}  

Cara tenta fazer isso, incluir uma verificação para ver se o usuário q está acessando o método está logado caso ele esteja redirecione a lógica para o método do usuário logado!!!

Pessoal, a versão do primeiro post é a mais atualizada? Gostei bastante desse plugin, mas não terei tempo para ler o tópico todo. Li a primeira página, a documentação e os primeiros comentários acerca da biblioteca, mas não me ficou claro se a versão do primeiro post é a mais atual.

Cara,

Página 8 (oito) penultimo post coloquei a versão 1.0.2.jar é a versão q eu estou utilizando acredito q seja a ultima…

Oi Spidey, a versão atual postada no tópico é a 1.2, está na página 3 ou 4, o Bronx postou.

Fabio, vou pesquisar aqui como posso resolver esse lance, mas acho que o ideal seria ter algo no web.xml, se o cara estiver logado mandar pra pagina Home. Lembrei do lance de redirecionamento para 404 e 500, se colocar a tag deles lá o usuário é redirecionado para uma JSP personalizada. Poderia ser feito o mesmo com o Restrictrex, algo do tipo:

<login-page>
	<login-status>LoggedIn</login-status>
	<location>/WEB-INF/jsp/home.jsp</location>
	</login-page>

Ou se o cara não estiver logado ir para a index.jsp:

<login-page>
	<login-status>LoggedOut</login-status>
	<location>/WEB-INF/jsp/index.jsp</location>
	</login-page>

Fazer verificação em cada método do sistema fica inviável, seria melhor fazer uma verificação de sessão, se o cara não tiver na sessão manda pra index, se tiver na sessão impedir dele acessar páginas liberadas, não sei se expliquei direito mas a ideia é essa.
O Bronx é que deve saber desse lance… =)

Um exemplo do que eu expliquei, tenho a minha index.jsp, qualquer um pode acessar:

O menú da home, assim como páginas restritas possuem outro tipo de css, para o funcionário o css da página é outro, como na imagem abaixo:

Beleza, mas se o funcionario cair numa index, ou numa venda.jsp. ou aluguel.jsp que são páginas que não possuem restrição alguma, é isto que acontece:

CSS de páginas index com menú de usuário logado, misturou td.
Como estou usando SiteMesh o decorador de index, venda e aluguel.jsp é especifico para usuários não logados, já as páginas com restrições possuem outro decorador. É ai que está o dilema.

Agora entedi!!!

Nesse caso não vou saber t ajudar, não uso o sitemash nem decorador nenhum…

Estou usando o velhor de guerra include das jsps…

Você tem duas opções:

1 - Vc restringe esses recursos “livres” para que somente usuários não logados acessem. Nesse caso, o próprio RestrictRex vai mandar o usuário logado para a página de acesso negado. Ex:

@Roles(roles = "usuario_nao_logado") //usuários que não satisfizerem essa condição serão redirecionados para o método anotado com @AccessDeniedPage
public void foo() {
    //stuff
}

;

2 - No início de cada método, verificar se o usuário está logado. Umas três linhas a mais no começo do método, mas vc fica livre pra redirecionar o cara para onde quiser. Ex:

public void bar() {
    if (!this.sessionUser.isLoggedIn())  //sessionUser pode ser, por exemplo, o componente que armazena os dados do usuário logado
        this.result.redirectTo...//se não estiver logado, redirecione-o para algum lugar
    //stuff
}

Enfim, acho que não tem muita relação com o restritor, e mais com a regra de negócios do cara.
Mas estão aí possíveis soluções. :thumbup:

Bronx tu chegou a terminar o demo desse seu recurso ? tipo um CRUD pegando do banco as roles etc… ?
Estou com dúvida nisto :

Não estou conseguindo pegar as roles do banco !

[code]package br.com.restrictrex.project.session;

import java.util.ArrayList;
import java.util.List;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
import br.com.restrictrex.project.model.Usuario;
import br.com.restrictrex.project.roles.Perfil;

@Component
@SessionScoped
public class UsuarioLogado {
private Usuario usuario;
public UsuarioLogado() {
}
public void efetuaLogin(Usuario usuario) {
this.usuario = usuario;
}
public void efetuaLogoff() {
this.usuario = null;
}
public Usuario getUsuario() {
return usuario;
}
public Perfil getPerfil() {
Perfil perfil = new Perfil();
if (this.getUsuario() != null) {
perfil.setLoggedIn(true);
List<String> roles = new ArrayList<String>();
roles.add(this.getUsuario().getRoles());
perfil.setRoles(roles);
}
return perfil;
}
}
[/code]

[code]package br.com.catequese.controller;

import br.com.catequese.security.UsuarioWeb;
import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import static br.com.caelum.vraptor.view.Results.*;

import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.validator.Hibernate;
import br.com.caelum.vraptor.validator.ValidationMessage;
import br.com.catequese.dao.UsuarioDao;
import br.com.catequese.to.Usuario;
import java.util.List;

@Resource
public class UsuarioController {
private final UsuarioDao dao;
private final Result result;
private final Validator validator;
private final UsuarioWeb usuarioWeb;

public UsuarioController(UsuarioDao dao, Result result, Validator validator, UsuarioWeb usuarioWeb) {
    this.dao = dao;
    this.result = result;
    this.validator = validator;
    this.usuarioWeb = usuarioWeb;
}

@Post @Path("/usuario/adiciona")
public void adiciona(Usuario usuario) {
    if (dao.existeUsuario(usuario)) {
        validator.add(new ValidationMessage("Login já existe", "usuario.login"));
    }
    validator.onErrorUse(page()).of(UsuarioController.class).formulario();
    dao.adiciona(usuario);
    result.redirectTo(UsuarioController.class).lista();
}

@Delete @Path("/usuario/{idUsuario}")
public void remove(Integer idUsuario) throws Exception {
    Usuario d = dao.carrega(idUsuario);
    dao.excluir(d);
    result.redirectTo(UsuarioController.class).lista();
}

@Get @Path("/usuario/{idUsuario}")
public Usuario edita(Integer idUsuario){
    return dao.carrega(idUsuario);
}

@Put @Path("/usuario/{usuario.idUsuario}")
public void altera(Usuario usuario) {
    validator.addAll(Hibernate.validate(usuario));
    validator.onErrorUse(page()).of(UsuarioController.class).edita(usuario.getIdUsuario());
    dao.atualiza(usuario);
    result.redirectTo(UsuarioController.class).lista();
}

@Get @Path("/usuario/novo")
public void formulario() {
}

@Get @Path("/usuario/todos")
public List&lt;Usuario&gt; lista(){
    return dao.listaTudo();
}

@Get @Path("/usuario/login")
public void loginForm() {
}

@Post @Path("/usuario/login")
public void login(Usuario usuario) throws Exception {
    Usuario carregado = dao.carrega(usuario);
    if (carregado == null) {
        validator.add(new ValidationMessage("Login e/ou senha inválidos", "usuario.login"));
    }
    validator.onErrorUse(page()).of(UsuarioController.class).loginForm();
    usuarioWeb.login(carregado);
    result.redirectTo(AlunoController.class).formulario();
}

@Path("/usuario/logout")
public void logout() {
    usuarioWeb.logout();
    result.redirectTo(UsuarioController.class).loginForm();
}

}
[/code]
no meu usuário controller:

          [code]   @Get @Path("/usuario/todos")
public List&lt;Usuario&gt; lista(){
    return dao.listaTudo();
}

[/code]

para implementar isto:

[code]package br.com.restrictrex.project.controller;

import br.com.bronx.vraptor.restrictrex.annotation.LoggedIn;
import br.com.bronx.vraptor.restrictrex.annotation.Roles;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.restrictrex.project.model.Usuario;
import br.com.restrictrex.project.session.UsuarioLogado;

@Resource
public class UsuarioController {

private final UsuarioLogado usuarioLogado;
public UsuarioController(UsuarioLogado usuarioLogado) {
    this.usuarioLogado = usuarioLogado;
}
    public void login(Usuario usuario) {
    this.usuarioLogado.efetuaLogin(usuario);
}

@LoggedIn
@Roles(roles = {"admin"})
@Path("/test1")
public void test1() {
}

@LoggedIn
@Roles(roles = {"admin", "moderador"})
@Path("/test2")
public void test2() {
}

@LoggedIn
@Roles(roles = {"admin", "moderador", "usuario"})
@Path("/test3")
public void test3() {
}

@LoggedIn
@Roles(roles = {"moderador"})
@Path("/test4")
public void test4() {
}

@LoggedIn
@Roles(roles = {"moderador", "usuario"})
@Path("/test5")
public void test5() {
}

@LoggedIn
@Roles(roles = {"usuario"})
@Path("/test6")
public void test6() {
}

}
[/code]

Bom, gostei muito da idéia dessa contribuição, deixa de forma simples o controle de acesso, estou tentando implementar mas ao acessar minha URL: http://localhost:8080/BMWEB/consultor/index está ocorrendo o erro:

[code]org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘accessControllerInterceptor’ defined in file [D:\TCC\vraptor-blank-project-3.1.1\build\web\WEB-INF\classes\br\bmweb\intercepetor\AccessControllerInterceptor.class]: Unsatisfied dependency expressed through constructor argument with index 1 of type [br.com.bronx.accesscontrol.restriction.RestrictionChecker]: : No matching bean of type [br.com.bronx.accesscontrol.restriction.RestrictionChecker] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.bronx.accesscontrol.restriction.RestrictionChecker] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:244)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:32)
br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:30)
com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:431)
java.util.AbstractList$Itr.next(AbstractList.java:345)
com.google.common.collect.Iterators$7.computeNext(Iterators.java:602)
com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:135)
com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:130)
com.google.common.collect.Lists.newArrayList(Lists.java:131)
com.google.common.collect.Collections2$FilteredCollection.toArray(Collections2.java:219)
br.com.caelum.vraptor.interceptor.DefaultInterceptorRegistry.interceptorsFor(DefaultInterceptorRegistry.java:50)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:42)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
root cause

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [br.com.bronx.accesscontrol.restriction.RestrictionChecker] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:896)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:765)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:244)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:32)
br.com.caelum.vraptor.util.collections.Functions$1.apply(Functions.java:30)
com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:431)
java.util.AbstractList$Itr.next(AbstractList.java:345)
com.google.common.collect.Iterators$7.computeNext(Iterators.java:602)
com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:135)
com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:130)
com.google.common.collect.Lists.newArrayList(Lists.java:131)
com.google.common.collect.Collections2$FilteredCollection.toArray(Collections2.java:219)
br.com.caelum.vraptor.interceptor.DefaultInterceptorRegistry.interceptorsFor(DefaultInterceptorRegistry.java:50)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:42)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)[/code]
As classes estão assim:

ConsultorController:

@LoggedIn @AccessDenied(loginPage="../cliente/Tela_Login", accessDeniedPage="../cliente/Tela_Login") public void index() { }
LoginControl:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package br.bmweb.controller;

import br.com.bronx.accesscontrol.interfaces.Login;
import br.com.bronx.accesscontrol.interfaces.Profile;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;

/**
*

  • @author cristiano
    */
    @Component
    @SessionScoped
    public class LoginControl implements Login{

    private boolean loggedIn;
    private Profile profile;

    @Override
    public boolean isLoggedIn() {
    return this.loggedIn;
    }

    @Override
    public void setLoggedIn(boolean loggedIn) {
    this.loggedIn = loggedIn;
    }

    @Override
    public Profile getProfile() {
    return this.profile;
    }

    @Override
    public void setProfile(Profile profile) {
    this.profile = profile;
    }

}[/code]
AccessControlInterceptor:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package br.bmweb.intercepetor;

import br.bmweb.bean.Usuario;
import br.bmweb.bean.UsuarioWeb;
import br.bmweb.controller.LoginControl;
import br.com.bronx.accesscontrol.exception.RestrictionAnnotationException;
import br.com.bronx.accesscontrol.interfaces.Login;
import br.com.bronx.accesscontrol.restriction.RestrictionChecker;
import br.com.bronx.accesscontrol.restriction.RestrictionResult;
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.caelum.vraptor.view.Results;

/**
*

  • @author cristiano
    */
    @Intercepts
    public class AccessControllerInterceptor implements Interceptor {

    private RestrictionChecker restrictionChecker;
    private Result result;
    private Login login;

    public AccessControllerInterceptor(LoginControl login, RestrictionChecker restrictionChecker, Result result){
    this.login = login;
    this.restrictionChecker = restrictionChecker;
    this.result = result;
    }

    @Override
    public boolean accepts(ResourceMethod method) {
    return this.restrictionChecker.hasRestriction(method.getMethod());
    }

    public void intercept(InterceptorStack stack, ResourceMethod resourceMethod,
    Object resourceInstance) throws InterceptionException {
    RestrictionResult restrictionResult;
    try {
    restrictionResult = restrictionChecker.checkRestrictions(resourceMethod.getMethod(), login);
    } catch (RestrictionAnnotationException e) {
    throw new InterceptionException(e);
    }
    if (restrictionResult.isRestricted()){
    result.use(Results.page()).redirect(restrictionResult.getDestination());
    } else {
    stack.next(resourceMethod, resourceInstance);
    }
    }
    }[/code]
    Meu web.xml tá assim:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>BMWEB</display-name> <filter> <filter-name>vraptor</filter-name> <filter-class>br.com.caelum.vraptor.VRaptor</filter-class> </filter> <filter-mapping> <filter-name>vraptor</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping> <context-param> <param-name>br.com.caelum.vraptor.packages</param-name> <param-value>br.com.bronx</param-value> </context-param> </web-app>
No console mostra isto:

16:12:19,646 INFO [VRaptor ] VRaptor 3.1.1 successfuly initialized 16:12:33,594 DEBUG [VRaptor ] VRaptor received a new request 16:12:33,688 DEBUG [DefaultRequestExecution] executing stack DefaultRequestExecution 16:12:33,759 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor 16:12:33,759 DEBUG [DefaultResourceTranslator] trying to access /consultor/index 16:12:33,797 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: ConsultorController.indexConsultorController.index()] 16:12:33,827 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor 16:12:33,835 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor
Tá faltando algo?

aqui tem um pronto e mais simples !
http://www.wbotelhos.com/

Gostei da ideia do controle de acesso. mas em meio a tantas mensagens, não consegui identificar o que está valendo.

Percebi que foi prometido um tutorial (ou resumo) mas não vi link… alguem sabe informar se foi feito?

tfa

O Bronx me passou o arquivo atualizado. O nome agora é SACI.

Vou elaborar um passo a passo e fazer a postagem amanhã