Controle-login-vraptor-3[RESOLVIDO]

30 respostas
juniorsatanas

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 :

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;
	}

}
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;
	}

}

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

30 Respostas

Lucas_Cavalcanti

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

juniorsatanas

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 :

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;
	}

}
Lucas_Cavalcanti

user tá vindo null…

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

juniorsatanas
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();
	}

}
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();
		}
	}

}
Lucas_Cavalcanti

isso significa que está funcionando?

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

C

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.

juniorsatanas

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 !

juniorsatanas

Cristianogro Boa Tarde Tudo bom ?

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

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();
		}
	}
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

C

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.

Lucas_Cavalcanti

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

juniorsatanas

Lucas Cavalcanti !

O que eu faria da vida sem a Caelum ? kkkkkkkkkk

Obrigado Mano !

juniorsatanas

Lucas BOM DIA .

Pegou !

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

O que tu acha ?

[img]http://lh6.ggpht.com/_nTzBoYSeT2I/TO-jwWtFSwI/AAAAAAAAENg/2IFhiwlyfXo/s800/botelho.png[/img]

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;
	}

}
Lucas_Cavalcanti

como vc fez o ?

juniorsatanas

@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");//*********** } }

C

Poste sua classe Usuario pra gente ver como está.

Lucas_Cavalcanti

anote o campo que é uma enum com

@Enumerated(EnumType.STRING)
juniorsatanas

Obrigado Lucas !

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

juniorsatanas

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

Lucas_Cavalcanti

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

juniorsatanas

Simplesmente não pega da COMBOBOX, a permissão ADMINISTRADO/USUARIO/GERENTE/..

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
	<head>
		<title>LOGIN</title>
	</head>
	<body>
		<form action="<c:url value='/login'/>" method="post">
			E-mail: &lt;input type="text" name="usuario.email"/&gt;<br/>
			Senha: &lt;input type="password" name="usuario.senha"/&gt;<br/><br/>
                        &lt;td&gt;
				&lt;label&gt;Perfil:&lt;/label&gt;
			&lt;/td&gt;
			&lt;td&gt;
				&lt;select id="perfil"&gt;
					&lt;option value=""&gt;Selecione o Perfil&lt;/option&gt;
					&lt;option value="ADMINISTRADOR"&gt;ADMINISTRADOR&lt;/option&gt;
					&lt;option value="USUARIO"&gt;USUARIO&lt;/option&gt;
                                        &lt;option value="GERENTE"&gt;GERENTE&lt;/option&gt;
				&lt;/select&gt;
                              
			&lt;/td&gt;
			&lt;input type="submit" value="Acessar"/&gt;
		&lt;/form&gt;
	&lt;/body&gt;
&lt;/html&gt;
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;

@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.setPerfil(TipoPerfil.USUARIO);  // se eu descomentar aqui ele pega a rules : USUARIO
		return entity;
	}

}
juniorsatanas

Eu acho que o perfil tinha que vim era do banco igual o SPRING SECURITY !

Lucas_Cavalcanti

pro select vir preenchido vc tem que colocar selected=“selected” em alguma das options…

pro valor do select ir pra requisição, vc precisa colocar um name!

<select name="usuario.perfil" id="perfil">
    ...
    <option value="xxx" selected="selected">xxx</option>
    ...
</select>

use o <c:if> ou o ternario ${teste ? xxx : yyy} para criar o selected

juniorsatanas

LUCAS, seguinte esté código aqui em baixo, não leva o perfil no login, vai somente a senha e login.

&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %&gt;

&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;LOGIN&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;form action="&lt;c:url value='/login'/&gt;" method="post"&gt;
			E-mail: &lt;input type="text" name="usuario.email"/&gt;<br/>
			Senha: &lt;input type="password" name="usuario.senha"/&gt;<br/><br/>
                        &lt;td&gt;
				&lt;label&gt;Perfil:&lt;/label&gt;
			&lt;/td&gt;
			&lt;td&gt;
			
                                &lt;select name="usuario.perfil" id="perfil"&gt;
                                        &lt;option value="ADMINISTRADOR" selected="selected"&gt;ADMINISTRADOR&lt;/option&gt;
                                        &lt;option value="USUARIO" selected="selected"&gt;USUARIO&lt;/option&gt;
                                        &lt;option value="GERENTE" selected="selected"&gt;GERENTE&lt;/option&gt;
                                 &lt;/select&gt;
			&lt;/td&gt;
			&lt;input type="submit" value="Acessar"/&gt;
		&lt;/form&gt;
	&lt;/body&gt;
&lt;/html&gt;

O que ta levando o PERFIL é este código, tenho fazer um getUsuario de alguma forma !

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());

	}
        
// SE EU COMENTAR ESTE CÓDIGO ELE NÃO PEGA NADA, SE EU MUDAR DE USUARIO PARA ADMINITRADOR O PERFIL AI PEGA !
	private Usuario getUsuario() {
		Usuario entity = new Usuario();
                entity.setNome("Washington Botelho");
		entity.setPerfil(TipoPerfil.USUARIO);
		return entity;
	}


}

[img]http://lh6.ggpht.com/_nTzBoYSeT2I/TO-jwWtFSwI/AAAAAAAAENg/2IFhiwlyfXo/s800/botelho.png[/img]

Outra coisa esquisita, que este código:

<p><b><a>BEM VINDO PERFIL:, ${sessionUser.usuario.perfil} </a></b></p>

sempre me retorna um usuário ADMINISTRADOR, no usuário logado !

[img]http://lh6.ggpht.com/_nTzBoYSeT2I/TPZ9pU8GNUI/AAAAAAAAEOw/VlD6voz-eaM/s1152/2.png[/img]

[img]http://lh6.ggpht.com/_nTzBoYSeT2I/TPZ9phNJhDI/AAAAAAAAEO0/1EiTaXObKoI/s1152/3.png[/img]

juniorsatanas

To quase procurando fazer usando o Spring Security ! muito complicado assim !

Lucas_Cavalcanti

juniorsatanas, vc deveria tentar entender como as coisas funcionam, e não simplesmente copiar, colar e ficar esperando que tudo funcione, na tentativa e erro.

não faz sentido vc escolher o perfil no login… vc precisa puxar o usuário do banco com o login e senha que ele passou e pegar o perfil do banco

juniorsatanas

Lucas Foi isso Mesmo !

Eu dei Control C e Control V, na ideia e tentei implementar, mas o bom que intendi a lógica da coisa ! agora vou fazer vindo tudo do banco !

Valeu !

C

Como que está sua classe Usuário? Onde e como está o método que vc quer bloquear(como está o método que está anotado com @Permissao)?

juniorsatanas

cristianogro BOM dia !

classes :

usuario.cpntroler
package com.wbotelhos.controller;

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.common.TipoPerfil;
import com.wbotelhos.dao.UsuarioDao;
import com.wbotelhos.interceptor.Permissao;
import com.wbotelhos.model.Usuario;

@Resource
@Permissao({TipoPerfil.USUARIO})
@Path("/usuario")
public class UsuarioController {

	private Result result;
	private UsuarioDao usuarioDao;

	public UsuarioController(Result result,
                                 UsuarioDao usuarioDao) {

                                 this.result = result;
                                 this.usuarioDao = usuarioDao;
	}

	@Get
	public void listar() {
		int tam = usuarioDao.getUsuarioList().size();
		result.include("msg",  "[" + tam + "] usuário(s) encontrado(s)...");
	}

	@Post
	@Path("/adicionar")
	@Permissao({TipoPerfil.USUARIO})
	public void adicionar(Usuario usuario) {
		usuario.setId((long) (usuarioDao.getUsuarioList().size() + 1));
		usuarioDao.adicionar(usuario);
		result.include("msg", "Usuário adicionado com sucesso!");
		result.redirectTo(getClass()).listar();
	}

	@Get
	@Path("/remover/{usuario.id}")
	@Permissao({TipoPerfil.USUARIO})
	public void remover(Usuario usuario) {
		usuarioDao.remover(usuario);
		result.include("msg", "Usuário removido com sucesso!");
		result.redirectTo(getClass()).listar();
	}

	@Get
	@Path("/negado")
	public void negado() {
		result.include("msg", "Ops! Você não pode fazer isso! (:");
	}

}
usuario dao
package com.wbotelhos.dao;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;

import br.com.caelum.vraptor.ioc.Component;
//import br.com.caelum.vraptor.ioc.SessionScoped;

import com.wbotelhos.model.Usuario;
import java.util.ArrayList;
import java.util.Collection;


@Component
//@SessionScoped
public class UsuarioDao {

	private EntityManager manager;

	public UsuarioDao(EntityManager manager) {
		this.manager = manager;
	}
        private Collection&lt;Usuario&gt; usuarioList = new ArrayList&lt;Usuario&gt;();

	public void adicionar(Usuario usuario) {
		usuarioList.add(usuario);
	}

	public void remover(Usuario usuario) {
		usuarioList.remove(usuario);
	}

	public Collection&lt;Usuario&gt; getUsuarioList() {
		return usuarioList;
	}

	public void setUsuarioList(Collection&lt;Usuario&gt; usuarioList) {
		this.usuarioList = usuarioList;
	}

	public Usuario login(String email, String senha) throws Exception {
		try {
			Query query = manager.createQuery("from Usuario u where u.email = :email and u.senha = :senha");
			query.setParameter("email", email);
			query.setParameter("senha", senha);
			return (Usuario) query.getSingleResult();
		} catch (NoResultException e) {
			throw new Exception("Usuario ou senha incorreta!", e);
		} catch (NonUniqueResultException e) {
			throw new Exception("Erro! Usuario duplicado.", e);
		} catch (Exception e) {
			throw new Exception("Nao foi possivel acessar o sistema!", e);
		}
	}

}
admin controler
package com.wbotelhos.controller;

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.common.TipoPerfil;
import com.wbotelhos.dao.UsuarioDao;
import com.wbotelhos.interceptor.Permissao;
import com.wbotelhos.model.Usuario;

@Resource
@Permissao(TipoPerfil.ADMINISTRADOR)
//@Path("/admin")
public class AdminController {

	private Result result;
	private UsuarioDao usuarioDao;

	public AdminController(Result result,
                               UsuarioDao usuarioDao) {

                               this.result = result;
		               this.usuarioDao = usuarioDao;
	}

	@Get
	@Path("/admin")
	public void admin() {
		result.include("msg", "Seja bem-vindo ao painel administrativo");
	}
        @Post
	@Path("/adicionar")
	@Permissao({TipoPerfil.ADMINISTRADOR})
	public void adicionar(Usuario usuario) {
		result.include("msg", "Usuário adicionado com sucesso!");
	}
        @Get
        @Permissao({TipoPerfil.ADMINISTRADOR})
	public void listar() {
		int tam = usuarioDao.getUsuarioList().size();
		result.include("msg",  "[" + tam + "] usuário(s) encontrado(s)...");
	}
        @Get
	@Path("/negado")
	public void negado() {
		result.include("msg", "Ops! Você não pode fazer isso! (:");
	}


}

index controller

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.USUARIO);
		return entity;
	}
 * */

}

login controler

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;  // 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();
                        result.include("msg", "SENHA INCORRETA");//***********
		}
	}

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

}

permissao intecepto

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) {
                System.out.print("============PermissaoInterceptor,accepts, IndexController!=========");
		return !Arrays.asList(IndexController.class)
                        .contains(method.getMethod()
                        .getDeclaringClass());
	}

	@Override
	public void intercept(InterceptorStack stack,
                              ResourceMethod method,
                              Object resourceInstance) {

		if (isAcessoMetodo(method) && isAcessoController(method)) {
                        System.out.print("============PermissaoInterceptor,intercept, Interceptor, Stack stack!=========");
			stack.next(method, resourceInstance);

		} else {
                    
                        System.out.print("============PermissaoInterceptor,intercept,else Interceptor, Stack stack!=========");
			result.use(logic()).redirectTo(UsuarioController.class).negado();
		}
	}

	private Usuario getUser() {
                System.out.print("============PermissaoInterceptor,getUser, Atributo User!=========");
		return (Usuario) session.getAttribute("user");
	}

	private boolean isAcessoMetodo(ResourceMethod method) {
		Permissao permissaoList = method.getMethod()
                                                .getAnnotation(Permissao.class);
                System.out.print("============PermissaoInterceptor,isAcessoMetodo, Se existe permissão anotada. Lista!=========");
		return isExistePermissao(permissaoList);
	}

	private boolean isAcessoController(ResourceMethod method) {
		Permissao permissaoList = method.getResource()
                                                .getType()
                                                .getAnnotation(Permissao.class);
                 System.out.print("============PermissaoInterceptor,isAcessoController, Se existe permissão anotada. Lista!=========");
		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())) {
                                    System.out.print("============PermissaoInterceptor,Com permissão anotada. Verificar!=========");
					return true;
				}
			}
		} else { // Sem permissão anotada. Continue!
                        System.out.print("============PermissaoInterceptor,Sem permissão anotada. Continue!=============");
			return true;
		}
		return false;
	}
}
package com.wbotelhos.interceptor;

import com.wbotelhos.common.TipoPerfil;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;


@Retention(RetentionPolicy.RUNTIME) //Em tempo de execução
public @interface Permissao {
	
	TipoPerfil[] value();
	
}
package com.wbotelhos.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 com.wbotelhos.controller.LoginController;
import com.wbotelhos.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) {
                System.out.println("==========LoginInterceptor,accepts, sessionUser, Arrays.asList=========");
		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);
                        System.out.println("==========LoginInterceptor,Intercept, sessionUser, Usuario != Null==========");
		} else {
                        System.out.println("==========LoginInterceptor,Intercept, sessionUser, RedirectTo Login Controller========");
                        result.use(logic())
                                .redirectTo(LoginController.class)
                                .login();
		}
	}

}
C

Porque vc usa assim?

Não seria assim:

juniorsatanas

é a maneira de anotar, o perfil para cada ação !

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

Criado 23 de novembro de 2010
Ultima resposta 2 de dez. de 2010
Respostas 30
Participantes 3