Controle-login-vraptor-3[RESOLVIDO]

Pessoal Baixei o controle-login-vraptor-3 + controle de permissão do : http://www.wbotelhos.com.br/

Agora que juntar os 2 PRIJETOS…

Estou pegando este erro :

init: undeploy-clean: deps-clean: do-clean: Deleting directory /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build check-clean: clean: init: deps-module-jar: deps-ear-jar: deps-jar: Created dir: /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/classes Created dir: /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/classes/META-INF Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/classes/META-INF Copying 53 files to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web library-inclusion-in-archive: Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib Copying 1 file to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/lib library-inclusion-in-manifest: Created dir: /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/empty Compiling 12 source files to /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/build/web/WEB-INF/classes /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/src/com/wbotelhos/interceptor/PermissaoInterceptor.java:67: cannot find symbol symbol : method getPerfil() location: class com.wbotelhos.model.Usuario if (perfil.equals(user.getPerfil())) { ^ 1 error /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/nbproject/build-impl.xml:405: The following error occurred while executing this line: /home/junior/NetBeansProjects/wbotelhos-controle-login-vraptor-3-76517c6/nbproject/build-impl.xml:228: Compile failed; see the compiler error output for details. FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

neste código :

[code]package com.wbotelhos.interceptor;

import static br.com.caelum.vraptor.view.Results.logic;

import java.util.Arrays;

import javax.servlet.http.HttpSession;

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.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;

import com.wbotelhos.controller.IndexController;
import com.wbotelhos.controller.UsuarioController;
import com.wbotelhos.model.Usuario;
import com.wbotelhos.common.TipoPerfil;

@Intercepts
@RequestScoped
public class PermissaoInterceptor implements Interceptor {

private Result result;
private HttpSession session;

public PermissaoInterceptor(Result result, HttpSession session) {
	this.result = result;
	this.session = session;
}

@Override
@SuppressWarnings({"unchecked", "element-type-mismatch"})
public boolean accepts(ResourceMethod method) {
	return !Arrays.asList(IndexController.class).contains(method.getMethod().getDeclaringClass());
}

@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) {
	if (isAcessoMetodo(method) && isAcessoController(method)) {
		stack.next(method, resourceInstance);
	} else {
		result.use(logic()).redirectTo(UsuarioController.class).negado();
	}
}

private Usuario getUser() {
	return (Usuario) session.getAttribute("user");
}

private boolean isAcessoMetodo(ResourceMethod method) {
	Permissao permissaoList = method.getMethod().getAnnotation(Permissao.class);
	return isExistePermissao(permissaoList);
}

private boolean isAcessoController(ResourceMethod method) {
	Permissao permissaoList = method.getResource().getType().getAnnotation(Permissao.class);
	return isExistePermissao(permissaoList);
}

private boolean isExistePermissao(Permissao permissaoList) {
	Usuario user = this.getUser();

	if (permissaoList != null) { // Com permissão anotada. Verificar!
		for (TipoPerfil perfil : permissaoList.value()) {
			if (perfil.equals(user.getPerfil())) {
				return true;
			}
		}
	} else { // Sem permissão anotada. Continue!
		return true;
	}

	return false;
}

}

[/code]

[code]
package com.wbotelhos.common;

import java.util.ArrayList;
import java.util.Collection;

public enum TipoPerfil {

USUARIO, ADMINISTRADOR, AUDITOR, DIRETOR, PRESIDENTE, PROGRAMADOR,GERENTE;

public static Collection<TipoPerfil> loadAll() {
	Collection<TipoPerfil> perfilList = new ArrayList<TipoPerfil>();

	for (TipoPerfil item : values()) {
		perfilList.add(item);
	}
	return perfilList;
}

}[/code]

http://www.4shared.com/file/l5gBmQTC/SIGI.html

a classe Usuario não tem o método getPerfil()

eu implementei o método e rodou logou no sistema mas quando tento fazer alguma coisa e deu este erro:

23/11/2010 16:54:07 org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet default threw exception java.lang.NullPointerException at com.wbotelhos.interceptor.PermissaoInterceptor.isExistePermissao(PermissaoInterceptor.java:66) at com.wbotelhos.interceptor.PermissaoInterceptor.isAcessoMetodo(PermissaoInterceptor.java:53) at com.wbotelhos.interceptor.PermissaoInterceptor.intercept(PermissaoInterceptor.java:40) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92) at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:662)

O referido erro faz menção a :

[code]package com.wbotelhos.interceptor;

import static br.com.caelum.vraptor.view.Results.logic;

import java.util.Arrays;
import javax.servlet.http.HttpSession;

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.ioc.RequestScoped;
import br.com.caelum.vraptor.resource.ResourceMethod;

import com.wbotelhos.controller.IndexController;
import com.wbotelhos.controller.UsuarioController;
import com.wbotelhos.model.Usuario;
import com.wbotelhos.common.TipoPerfil;

@Intercepts
@RequestScoped
public class PermissaoInterceptor implements Interceptor {

private Result result;
private HttpSession session;

public PermissaoInterceptor(Result result, HttpSession session) {
	this.result = result;
	this.session = session;
}

@Override
@SuppressWarnings({"unchecked", "element-type-mismatch"})
public boolean accepts(ResourceMethod method) {
	return !Arrays.asList(IndexController.class).contains(method.getMethod().getDeclaringClass());
}

@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) {
	if (isAcessoMetodo(method) && isAcessoController(method)) {
		stack.next(method, resourceInstance);
	} else {
		result.use(logic()).redirectTo(UsuarioController.class).negado();
	}
}

private Usuario getUser() {
	return (Usuario) session.getAttribute("user");
}

private boolean isAcessoMetodo(ResourceMethod method) {
	Permissao permissaoList = method.getMethod().getAnnotation(Permissao.class);
	return isExistePermissao(permissaoList);
}

private boolean isAcessoController(ResourceMethod method) {
	Permissao permissaoList = method.getResource().getType().getAnnotation(Permissao.class);
	return isExistePermissao(permissaoList);
}

private boolean isExistePermissao(Permissao permissaoList) {
	Usuario user = this.getUser();

	if (permissaoList != null) { // Com permissão anotada. Verificar!
		for (TipoPerfil perfil : permissaoList.value()) {
			if (perfil.equals(user.getPerfil())) {
				return true;
			}
		}
	} else { // Sem permissão anotada. Continue!
		return true;
	}

	return false;
}

}

[/code]

user tá vindo null…

o atributo da sessão é user mesmo ou usuario?

[code]package com.wbotelhos.controller;

import static br.com.caelum.vraptor.view.Results.logic;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

import com.wbotelhos.dao.UsuarioDao;
import com.wbotelhos.model.Usuario;
import com.wbotelhos.util.SessionUser;

@Resource
public class LoginController {

private Result result;
private UsuarioDao usuarioDao;
private SessionUser sessionUser;

public LoginController(Result result, UsuarioDao usuarioDao, SessionUser sessionUser) {
	this.result = result;
	this.usuarioDao = usuarioDao;
	this.sessionUser = sessionUser;
}

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

@Post
@Path("/login")
public void login(Usuario usuario) {
	try {
		Usuario user = usuarioDao.login(usuario.getEmail(), usuario.getSenha());

		sessionUser.setUsuario(user);

		result.use(logic()).redirectTo(IndexController.class).index();
	} catch (Exception e) {
		e.printStackTrace();
		result.use(logic()).redirectTo(getClass()).login();
	}
}

@Get
@Path("/logout")
public void logout() {
	sessionUser.setUsuario(null);
	result.use(logic()).redirectTo(getClass()).login();
}

}[/code]

[code]package interceptor;

import static br.com.caelum.vraptor.view.Results.logic;

import java.util.Arrays;

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 controller.LoginController;
import util.SessionUser;

@Intercepts
public class LoginInterceptor implements Interceptor {

private Result result;
private SessionUser sessionUser; // chama a classe SessionUser

public LoginInterceptor(Result result, SessionUser sessionUser) {
	this.result = result;
	this.sessionUser = sessionUser;
}

@Override
@SuppressWarnings({"unchecked", "element-type-mismatch"})
public boolean accepts(ResourceMethod method) {
	return !Arrays.asList(LoginController.class).contains(method.getMethod().getDeclaringClass());
}

@Override
public void intercept(InterceptorStack stack, ResourceMethod method, Object resourceInstance) {
	if (sessionUser.getUsuario() != null) {
		stack.next(method, resourceInstance);
	} else {
		result.use(logic()).redirectTo(LoginController.class).login();
	}
}

}

[/code]

isso significa que está funcionando?

ajudaria mais vc explicar o que acontece ao invés de postar todo o código fonte aqui

Na sua classe LoginController na linha 39 sessionUser.setUsuario(user); ao invés de usar o SessionUser do pacote do wbotelhos tente trocar por um HttpSession comum do Java, provavelmente nessa linha ele não está conseguindo setar ou o valor que é setado nesta linha está sendo perdido em algum ponto.

Lucas .
Pelo fonte achava que era melhor !
Bom vou fazer um resumão :

    Peguei um Controle de usuário e um controle de permissão do : http://www.wbotelhos.com/
    Para não ter que refazer a roda !

 Pois bem meu caro Lucas,  tenho um public enum TipoPerfil , que e criado todas as permissões dos sistema, tipo o do Spring Security no arquivo XML, eu pego essa permissão pelo: public @interface Permissao . Ai eu pego essa permissão  e vejo se o cara que vai logar tem ela aqui : PermissaoInterceptor implements Interceptor.

private Usuario getUser() {
		return (Usuario) session.getAttribute("user");
	}
private boolean isExistePermissao(Permissao permissaoList) {
		Usuario user = this.getUser();

		if (permissaoList != null) { // Com permissão anotada. Verificar!
			for (TipoPerfil perfil : permissaoList.value()) {
				if (perfil.equals(user.getPerfil())) {
                                    System.out.print("Com permissão anotada. Verificar!");
					return true;
				}
			}
		} else { // Sem permissão anotada. Continue!
                    System.out.print("Sem permissão anotada. Continue!");
			return true;

		}

		return false;
	}

package com.wbotelhos.interceptor;
public class PermissaoInterceptor implements Interceptor
public @interface Permissao
public class LoginInterceptor implements Interceptor

package com.wbotelhos.util;
public class SessionUser

package com.wbotelhos.model;
public class Usuario

package com.wbotelhos.dao;
public class UsuarioDao

package com.wbotelhos.controller;
public class AdminController
public class IndexController
public class LoginController
public class UsuarioController

package com.wbotelhos.common;
public enum TipoPerfil

Bom é isso !

Cristianogro Boa Tarde Tudo bom ?

Vou fazer o que você sugeriu, muito obrigado pela dica !
Ficaria assim :

[code]import javax.servlet.http.HttpSession;

@Post
@Path("/login")
public void login(Usuario usuario) {
try {
Usuario user = usuarioDao.login(usuario.getEmail(), usuario.getSenha());

		//sessionUser.setUsuario(user);
                     HttpSession.setUsuario(user);
		result.use(logic()).redirectTo(IndexController.class).index();
	} catch (Exception e) {
		e.printStackTrace();
		result.use(logic()).redirectTo(getClass()).login();
	}
}

[/code]

[quote]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
com.wbotelhos.interceptor.PermissaoInterceptor.isExistePermissao(PermissaoInterceptor.java:66)
com.wbotelhos.interceptor.PermissaoInterceptor.isAcessoMetodo(PermissaoInterceptor.java:53)
com.wbotelhos.interceptor.PermissaoInterceptor.intercept(PermissaoInterceptor.java:40)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:46)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
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)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
Apache Tomcat/6.0.20[/quote]

Não cara, vc vai precisar adaptar sua classe LoginController, você precisa declarar uma variável do tipo HttpSession e colocá-la no construtor da sua classse, ou seja, tudo o que tiver relacionado a SessionUser vc adapta para HttSession, basicamente as linhas que vc vai alterar vai ser 14, 20, 22, 25 e 39.

na apostila do fj-28 tem um exemplo bom de como fazer isso:
http://www.caelum.com.br/curso/fj-28-vraptor-hibernate-ajax/

Lucas Cavalcanti !

O que eu faria da vida sem a Caelum ? kkkkkkkkkk

Obrigado Mano !

Lucas BOM DIA .

     Pegou !

     O único Problema é que ele não ta pegando o PERFIL, da classe ! 

        O que tu acha ?

                  [code]package com.wbotelhos.controller;

import br.com.caelum.vraptor.Get;
import javax.servlet.http.HttpSession;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;

import com.wbotelhos.model.Usuario;
import com.wbotelhos.common.TipoPerfil;

@Resource
public class IndexController {

private HttpSession session;

public IndexController(HttpSession session) {     //HttpSession
                           this.session = session;
}
    @Get
@Path("/")
public void index() {
	session.setAttribute("user", this.getUsuario());
}

private Usuario getUsuario() {
	Usuario entity = new Usuario();
	entity.setNome("Washington Botelho");
	entity.setPerfil(TipoPerfil.ADMINISTRADOR);
	return entity;
}

}[/code]

como vc fez o ?

@Post @Path("/login") public void login(Usuario usuario) { try { Usuario user = usuarioDao.login(usuario.getEmail(), usuario.getSenha()); sessionUser.setUsuario(user); result.use(logic()).redirectTo(IndexController.class).index(); } catch (Exception e) { e.printStackTrace(); result.use(logic()).redirectTo(getClass()).login(); result.include("msg", "SENHA INCORRETA");//*********** } }

Poste sua classe Usuario pra gente ver como está.

anote o campo que é uma enum com

@Enumerated(EnumType.STRING)

Obrigado Lucas !

Depois que der certo vou tentar pegar esse perfil do banco tipo Spring !

Lucas não estou conseguindo resolver… tem alguma dica ?

tenho: vc me dizer qual erro está acontecendo :wink: