Finalizei um projeto, bacana no vraptor. E não estou conseguindo acertar uma coisinha.
Eu fiz uma anotação, chamada liberada. E eu só quero liberar a página inicial, onde eu coloquei o formulário de login. Como eu faço para implementar esse método aqui.
// Vai interceptar se o metodo não tiver a anotação Liberado e o usuário não estiver logado.
public boolean accepts(ResourceMethod method) {
return !usuario.isLogado() && !method.containsAnnotation(Liberado.class);
}
Eu ja criei o interceptor.
Eu só não estou acertando, a instrução para liberar somente a página inicial, sendo a mesma. Anotada como liberada.
DaniloAndrade
se o usuario estiver logado ele vai ter acesso a todas as paginas?
se for isso seu metodo deveria estar assim
// Vai interceptar se o metodo não tiver a anotação Liberado e o usuário não estiver logado. publicbooleanaccepts(ResourceMethodmethod){if(usuario.isLogado()){// se ele estiver logado tera acesso a todas as paginasreturntrue;}//se não so terá acesso as que estiverem anotadas com Liberadoreturnmethod.containsAnnotation(Liberado.class);}
acho que é isso
101574
Poww cara,
Não funfou, o que chrome me retorna.
Tem outra ideia não?
flw.
DaniloAndrade
velhinho, agora ficou difícil… coloca um break point no interceptor e no metodo do seu controler e da uma analisada no que esta acontecendo
DaniloAndrade
coloca seu interceptor, controlle pra agente da uma olhada
Lucas_Cavalcanti
method.containsAnnotation só vale pra anotação no método, não vale pra anotação na classe.
Eu tinha deixado com false, para não interceptar. Porque dessa forma estava bloqueando tudo.
// Vai interceptar se o metodo não tiver a anotação Liberado e o usuário não estiver logado. publicbooleanaccepts(ResourceMethodmethod){return!usuario.isLogado()&&!method.containsAnnotation(Liberado.class);}
Cara, ainda não funcionou. Acredita.
Olha minha classe Usuário.
@EntitypublicclassUsuario{@Id@GeneratedValueprivateLongid;privateStringnome;privateStringlogin;privateStringsenha;//getters and setters}
@ResourcepublicclassUsuarioController{privatefinalUsuarioWebusuarioWeb;privatefinalUsuarioDAOdao;privatefinalResultresult;privatefinalValidatorvalidator;publicUsuarioController(UsuarioDAOdao,Resultresult,Validatorvalidator,UsuarioWebusuarioWeb){this.dao=dao;this.result=result;this.validator=validator;this.usuarioWeb=usuarioWeb;}publicvoidloginForm(){}@Path("/usuario/novo")publicvoidnovo(){}@Post("/usuario")publicvoidadiciona(Usuariousuario){if(dao.existeUsuario(usuario)){validator.add(newValidationMessage("Login já existe","usuario.login"));}validator.onErrorUsePageOf(UsuarioController.class).novo();dao.adiciona(usuario);result.redirectTo(IndexController.class).index();}@Post("/login")publicvoidlogin(Usuariousuario){Usuariocarregado=dao.carrega(usuario);if(carregado==null){validator.add(newValidationMessage("Login e/ou senha inválidos","usuario.login"));}validator.onErrorUsePageOf(UsuarioController.class).loginForm();usuarioWeb.login(carregado);result.redirectTo(AdministracaoController.class).administracao();}@Path("/logout")publicvoidlogout(){usuarioWeb.logout();result.redirectTo("/");}@Get("/usuario")publicList<Usuario>lista(){returndao.listaTudo();}// Edição@Get("/usuario/{id}")publicUsuarioedita(Longid){//Include lista de bairros returndao.carrega(id);}// Alteração - Gera a interface para alterar// Envia o ID para alterar@Put("/usuario/{usuario.id}")publicvoidaltera(finalUsuariousuario){dao.atualiza(usuario);// Redireciona para a paǵina result.redirectTo(this).lista();}// Remove// Envia o ID para Remoção@Delete("/usuario/{id}")publicvoidremove(Longid){Usuariousuario=dao.carrega(id);dao.remove(usuario);// Redireciona para a listagem, após a inserção.result.redirectTo(this).lista();}// Busca por nomepublicList<Usuario>busca(Stringnome){result.include("nome",nome);returndao.busca(nome);}// Busca Json para auto completar@Get("/usuario/busca.json")publicvoidbuscaJson(Stringq){result.use(json()).withoutRoot().from(dao.busca(q)).exclude("id").serialize();}}
Meu interceptor
@InterceptspublicclassUsuarioInterceptorimplementsInterceptor{// VariavéisprivatefinalUsuarioWebusuario;privatefinalResultresult;// ConstrutorpublicUsuarioInterceptor(UsuarioWebusuario,Resultresult){this.usuario=usuario;this.result=result;}// Vai interceptar se o metodo não tiver a anotação Liberadopublicbooleanaccepts(ResourceMethodmethod){return!usuario.isLogado()&&!method.containsAnnotation(Liberado.class)&&!method.getResource().getType().isAnnotationPresent(Liberado.class);}// Metodo intercept - o que deve ser feito quando é encontrado a anotaçãopublicvoidintercept(InterceptorStackstack,ResourceMethodmethod,ObjectresourceInstance)throwsInterceptionException{result.redirectTo(IndexController.class).index();}}