Como fazer uma tela de Login e senha utilizando JSF

Fiz uma tela de login, nessa tela o usuário poderá se cadastrar através de um botão cadastro, feito o cadastro ele poderá acessar o sistema informando senha e CPF.

Meu sistema será para denúncias ambientais, e terá um fiscal que vai receber todas a denúncias feitas pelos usuários.

Minha duvida é, como vou fazer para que quando o usuário se logue, ele tenha acesso a tela do usuário, e quando o fiscal se logue vá para a tela fiscal? O deixei o código para quem puder me dar uma ajudaTexto pré-formatado
Tela Login Bean:
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package Bean;

import DAO.UsuarioDAO;
import Domain.Usuario;
import Util.MensagesUtil;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

public class LoginBean implements Serializable {

private static final long serialVersionUID = 1L;

private Usuario usuario = new Usuario();
private UsuarioDAO usuarioDao;
private ArrayList<Usuario> itens;



public String login() throws SQLException {
	usuarioDao = new UsuarioDAO();
	 usuario = usuarioDao.obterUsuario(usuario);	
	 if (usuario != null) {
		if (("usuario".equals(usuario.getPerfil()))) {
    return "/telaOpcaoUsuario.xhtml";
} else if (("FISCAL".equals(usuario.getPerfil()))) {
    return "/denunciaFiscalRecebe";  

}else { MensagesUtil.adicionarMensagemErro(“Usuario e Senha invalidos !”);
return “/login.xhtml”;
}
}
return null;

    }
public void Cadastrar() {
 try {
	 	usuarioDao = new UsuarioDAO();
        usuarioDao.salvar(usuario);
        
        setItens(usuarioDao.listar());
        MensagesUtil.adicionarMensagemSucesso("Usuario Salvo Com Sucesso");

    } catch (SQLException ex) {
        ex.printStackTrace();
        MensagesUtil.adicionarMensagemErro(ex.getMessage());
    }
}

public void Excluir() {
    try {
    	usuarioDao = new UsuarioDAO();
        usuarioDao.excluir(usuario);

        setItens(usuarioDao.listar());
        MensagesUtil.adicionarMensagemSucesso("Usuario Removido com Sucesso");

    } catch (SQLException ex) {
        ex.printStackTrace();
        MensagesUtil.adicionarMensagemErro(ex.getMessage());
    }
}

public void Editar() {
    try {
    	usuarioDao = new UsuarioDAO();
        usuarioDao.editar(usuario);

        setItens(usuarioDao.listar());
        MensagesUtil.adicionarMensagemSucesso("Usuario Editado Com Sucesso");

    } catch (SQLException ex) {
        ex.printStackTrace();;
        MensagesUtil.adicionarMensagemErro(ex.getMessage());

    }
}


public UsuarioDAO getUsuarioDao() {
	return usuarioDao;
}

public void setUsuarioDao(UsuarioDAO usuarioDao) {
	this.usuarioDao = usuarioDao;
}

public ArrayList<Usuario> getItens() {
	return itens;
}

public void setItens(ArrayList<Usuario> itens) {
	this.itens = itens;
}

public Usuario getUsuario() {
	return usuario;
}

public void setUsuario(Usuario usuario) {
	this.usuario = usuario;
}

}
Tela Usuario Java
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package Domain;

public class Usuario {

private Long codigo;
private String nome;
private String senha;
private String endereco;
private String telefone;
private String cpf;
private String tipo;
public int getPerfil;


public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public Long getCodigo() {
    return codigo;
}

public void setCodigo(Long codigo) {
    this.codigo = codigo;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getSenha() {
	return senha;
}

public void setSenha(String senha) {
	this.senha = senha;
}

public String getEndereco() {
    return endereco;
}

public void setEndereco(String endereco) {
    this.endereco = endereco;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getTipo() {
	return tipo;
}

public void setTipo(String tipo) {
	this.tipo = tipo;
}

@Override
public String toString() {
    String saida = codigo + "-" + nome + "-" + cpf + "-" + endereco + "-" + tipo + "-" + senha;

    return saida; 
}

public int getPerfil() {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}
Tela Fiscal Java

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package Domain;

/**
*
*
*/
public class Fiscal {
private Long codigo;
private String nome;
private String cpf;
private Denuncia denuncia;

public Denuncia getDenuncia() {
    return denuncia;
}

public void setDenuncia(Denuncia denuncia) {
    this.denuncia = denuncia;
}
public Long getCodigo() {
    return codigo;
}

public void setCodigo(Long codigo) {
    this.codigo = codigo;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}



public String toString() {
    String saida = codigo + "-" + nome + "-" + cpf + "-";
    
    

    return saida;
} 
    public int getPerfil() {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}

Muito provavelmente você vai precisar de algo como Spring Security ou de JAAS (Java Authentication and Authorization Service)
Ambos oferecem mecanismos para você trabalhar com perfis (roles) e, assim, conseguir direcionar cada caso.
Eu acredito que o mais viável é ir para o Spring Security.

Uma terceira opção é, ao cadastrar o usuário (comum ou fiscal) você defina qual o perfil do mesmo e, de acordo com o perfil, redirecione para a página desejada.

1 curtida

sim a ultima opção estou tentando, só não seu como fazer para chamar o perfil 1 por exemplo, que será do usuário, será que devo de fazer no dialogo do painel grid um icone que tenha já definido com perfil 1?

Não precisa.
Você só precisa recuperar o perfil e criar uma função que direcione a requisição para a página adequada.

essa função no java, tem algum exemplo?

No JSF2, quando eu desenvolvia com essa tecnologia, você tinha a possibilidade de criar um método que retorna uma String que é o nome da página a ser acessada, exemplo

public String redireciona() {
    return "newUser";
}

O método acima vai direcionar para a página newUser.jsf.

Você pode usar PhaseListener que é próprio do JSF, e é bem fácil, só precisar implementar PhaseListener e depois declarar no faces-config.

Olha como eu fiz, eu ã sei onde colocas esse método!

Tela Fiscal Java
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package Domain;

/**
*

*/
public class Fiscal {
private Long codigo;
private String nome;
private String cpf;
private Denuncia denuncia;
public int getPerfil=2;

public Denuncia getDenuncia() {
    return denuncia;
}

public void setDenuncia(Denuncia denuncia) {
    this.denuncia = denuncia;
}
public Long getCodigo() {
    return codigo;
}

public void setCodigo(Long codigo) {
    this.codigo = codigo;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}



public String toString() {
    String saida = codigo + "-" + nome + "-" + cpf + "-";
    
    

    return saida;
} 
    public int getPerfil() {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}

Tela Usuário Java
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package Domain;

/**
*

public class Usuario {

private Long codigo;
private String nome;
private String senha;
private String endereco;
private String telefone;
private String cpf;
private String tipo;
public int getPerfil=1;


public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public Long getCodigo() {
    return codigo;
}

public void setCodigo(Long codigo) {
    this.codigo = codigo;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getSenha() {
	return senha;
}

public void setSenha(String senha) {
	this.senha = senha;
}

public String getEndereco() {
    return endereco;
}

public void setEndereco(String endereco) {
    this.endereco = endereco;
}

public String getTelefone() {
    return telefone;
}

public void setTelefone(String telefone) {
    this.telefone = telefone;
}

public String getTipo() {
	return tipo;
}

public void setTipo(String tipo) {
	this.tipo = tipo;
}


public String toString() {
    String saida = codigo + "-" + nome + "-" + cpf + "-" + endereco + "-" + tipo + "-" + senha;

    return saida; 
}

public int getPerfil() {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}
Tela Login
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package Bean;

import DAO.UsuarioDAO;
import Domain.Usuario;
import Util.MensagesUtil;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

public class LoginBean implements Serializable {

private static final long serialVersionUID = 1L;

private Usuario usuario = new Usuario();
private UsuarioDAO usuarioDao;
private ArrayList<Usuario> itens;



public String login() throws SQLException {
	usuarioDao = new UsuarioDAO();
	 usuario = usuarioDao.obterUsuario(usuario);	
	 if (usuario != null) {
		if (usuario.getPerfil() == 1) {
    return "/telaOpcaoUsuario.xhtml";
} else if (usuario.getPerfil == 2) {
    return "/denunciaFiscalRecebe";  

}else { MensagesUtil.adicionarMensagemErro(“Usuario e Senha invalidos !”);
return “/login.xhtml”;
}
}
return null;

    }
public void Cadastrar() {
 try {
	 	usuarioDao = new UsuarioDAO();
        usuarioDao.salvar(usuario);
        
        setItens(usuarioDao.listar());
        MensagesUtil.adicionarMensagemSucesso("Usuario Salvo Com Sucesso");

    } catch (SQLException ex) {
        ex.printStackTrace();
        MensagesUtil.adicionarMensagemErro(ex.getMessage());
    }
}

public void Excluir() {
    try {
    	usuarioDao = new UsuarioDAO();
        usuarioDao.excluir(usuario);

        setItens(usuarioDao.listar());
        MensagesUtil.adicionarMensagemSucesso("Usuario Removido com Sucesso");

    } catch (SQLException ex) {
        ex.printStackTrace();
        MensagesUtil.adicionarMensagemErro(ex.getMessage());
    }
}

public void Editar() {
    try {
    	usuarioDao = new UsuarioDAO();
        usuarioDao.editar(usuario);

        setItens(usuarioDao.listar());
        MensagesUtil.adicionarMensagemSucesso("Usuario Editado Com Sucesso");

    } catch (SQLException ex) {
        ex.printStackTrace();;
        MensagesUtil.adicionarMensagemErro(ex.getMessage());

    }
}


public UsuarioDAO getUsuarioDao() {
	return usuarioDao;
}

public void setUsuarioDao(UsuarioDAO usuarioDao) {
	this.usuarioDao = usuarioDao;
}

public ArrayList<Usuario> getItens() {
	return itens;
}

public void setItens(ArrayList<Usuario> itens) {
	this.itens = itens;
}

public Usuario getUsuario() {
	return usuario;
}

public void setUsuario(Usuario usuario) {
	this.usuario = usuario;
}

}

Quanto você conhece de JSF? Está seguindo o que para te orientar? Livro, apostila, vídeo aula?

1 curtida

livros java como programar, só que não consigo fazer essa tela de login

a tela ta cadastrando e tal, só que tem que ter um pouco de segurança pois um usuário não poderá ter acessoa a tela fiscal

O método que sugeri, como você deveria imaginar, por ser tratar de um método capaz de redirecionar, deve ser criado no teu managed bean.

1 curtida

é que sou iniciante em jsf, mas tenho que fazer isso

Então você precisa estudar mais.
Uma breve pesquisa sobre JSF 2 redirect já te permitiria encontrar uma infinidade de materiais sobre o assunto. Óbvio que você teria que filtrar, mas, isso é óbvio.
Por exemplo, esta página ressalta exatamente o q eu sugeri. Veja q não é nada absurdo e, ainda traz uma coisa bem parecida com o q você quer.

1 curtida