Duvida em autenticar usuário em jsf

10 respostas
B

Estou tentando fazer a autenticação do usuário mas está dando erro, alguem pode me dar uma luz...

Trecho da index:

<f:view>
                                        <h:form id="formLogin">
                                            <fieldset>
                                                <h:panelGrid columns="3">
                                                    <div class="field">
                                                        <h:outputLabel value="Login" for="un" styleClass="label"/>
                                                        <h:inputText id="un" value="#{login.login}" styleClass="input"/>
                                                    </div>
                                                    <div class="field">
                                                        <h:outputLabel value="Senha" for="pw" styleClass="label"/>
                                                        <h:inputSecret id="pw" value="#{login.senha}" styleClass="input"/>
                                                    </div>
                                                </h:panelGrid>
                                                <a4j:commandButton type="button" value="Login" action="#{login.validateLogin}" styleClass="buttonLogin"/>
                                                <h:message for="formLogin"/>
                                            </fieldset>
                                        </h:form>
                                    </f:view>

Controle login:

package br.com.aquaRio.control;

import br.com.aquaRio.persistence.UsuarioDao;

public class Login {

    private boolean loginOk;
    private String login;
    private String senha;
    int contLog = 0;

    public boolean isLoginOk() {
        return loginOk;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

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

    public String validateLogin() {
        if (new UsuarioDao().autenticar(login, senha)) {
            loginOk = true;
            return "secpage";
        } else {
            contLog = contLog + 1;
            if (contLog < 3) {
                return "index";
            } else {
                return "seclogin";
            }
        }
    }

    public String offLogin() {
        loginOk = false;
        return "index";
    }
}

Controle materLogin:

package br.com.aquaRio.control;

import java.util.List;
import java.util.ArrayList;

public class ManterLoginUsuario {

    private List<String> data = new ArrayList<String>();
    private List<String> securedData = new ArrayList<String>();
    private boolean loginOk;
    private String userName;

    public ManterLoginUsuario() {
            securedData.add("Bem vindo: " + userName);        
    }

    public void setLoginOk(boolean loginOk) {
        this.loginOk = loginOk;
    }

    public List<String> getSecuredData() {
        if (!loginOk) {
            throw new SecurityException();
        }
        return securedData;
    }

    public List<String> getData() {
        return data;
    }
}

Meu usuarioDao:

package br.com.aquaRio.persistence;

import org.hibernate.*;
import br.com.aquaRio.hibernate.HibernateUtil;
import br.com.aquaRio.model.*;

public class UsuarioDao {

    protected Session s;
    protected Transaction t;
    protected Query q;

    public void salvar(Usuario u) throws Exception {
        s = HibernateUtil.getInstance();
        t = s.beginTransaction();
        s.save(u);
        t.commit();
    }

    public void excluir(Usuario u) throws Exception {
        s = HibernateUtil.getInstance();
        t = s.beginTransaction();
        s.delete(u);
        t.commit();
    }

    public void atualizar(Usuario u) throws Exception {
        s = HibernateUtil.getInstance();
        t = s.beginTransaction();
        s.update(u);
        t.commit();
    }

    public Usuario obterPorId(Integer id) throws Exception {
        s = HibernateUtil.getInstance();
        return (Usuario) s.get(Usuario.class, id);
    }

    public boolean autenticar(String login, String senha) {
        boolean valid = false;
        q = s.createQuery("from Usuario u where u.login = :lg and u.senha = :md5(sen)");
        q.setString("lg", login);
        q.setString("sen", senha);
        Usuario usuario = (Usuario) q.uniqueResult();
        if (usuario != null) {
            valid = true;
        }
        return valid;
    }

    public boolean cpfExistente(String cpf) throws Exception{
        boolean valid = false;
        s = HibernateUtil.getInstance();
        q = s.createQuery("from Usuario u where u.cpf = :cpf");
        Usuario usuario = (Usuario) q.uniqueResult();
        if (usuario != null) {
            valid = true;
        }
        return valid;
    }
}

Acho que estou fazendo algo de errado no meu método autenticar...

10 Respostas

dreampeppers99

Qual o erro?

B

exception

javax.servlet.ServletException: #{login.validateLogin}: java.lang.NullPointerException

luxu

vc usa JSF1.2 ou 2.0? Me parece q o seu bean naum estah anotado…

B

JSF1.2

B

Meu bean:

package br.com.aquaRio.model;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

@Entity
@Table(name="usuario")
public class Usuario implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="codusuario")
    private Integer codusuario;

    @Column(name="nome", length=50, nullable=false)
    private String nome;

    @Column(name="email", length=40, nullable=false, unique=true)
    private String email;

    @Column(name="senha", length=10, nullable=false)
    private String senha;

    @Column(name="cpf", length=14, nullable=false)
    private String cpf;

    @Temporal(TemporalType.DATE)
    @Column(name="datanascimento", nullable=false)
    private Date datanascimento;

    @Column(name="logradouro", length=60, nullable=false)
    private String logradouro;

    @Column(name="numero", nullable=false)
    private Integer numero;

    @Column(name="bairro", length=30, nullable=false)
    private String bairro;

    @Column(name="cidade", length=40, nullable=false)
    private String cidade;

    @Column(name="estado", length=40, nullable=false)
    private String estado;

    @Column(name="cep", length=9, nullable=false)
    private String cep;

    @Column(name="telefone", length=9, nullable=false)
    private String telefone;

    @Column(name="celular", length=9, nullable=false)
    private String celular;

    @OneToMany(mappedBy="usuario")
	private List<Produto> produtos;


    public Usuario() {
    }

    public Usuario(Integer codusuario) {
        this.codusuario = codusuario;
    }

    public Usuario(String nome, String email, String senha, String cpf, Date datanascimento, String logradouro, Integer numero, String bairro, String cidade, String estado, String cep, String telefone, String celular, Integer permicao, List<Produto> produtos) {
        this.nome = nome;
        this.email = email;
        this.senha = senha;
        this.cpf = cpf;
        this.datanascimento = datanascimento;
        this.logradouro = logradouro;
        this.numero = numero;
        this.bairro = bairro;
        this.cidade = cidade;
        this.estado = estado;
        this.cep = cep;
        this.produtos = produtos;
        this.telefone = telefone;
        this.celular = celular;
    }

    public Usuario(Integer codusuario, String nome, String email, String senha, String cpf, Date datanascimento, String logradouro, Integer numero, String bairro, String cidade, String estado, String cep, String telefone, String celular, Integer permicao, List<Produto> produtos) {
        this.codusuario = codusuario;
        this.nome = nome;
        this.email = email;
        this.senha = senha;
        this.cpf = cpf;
        this.datanascimento = datanascimento;
        this.logradouro = logradouro;
        this.numero = numero;
        this.bairro = bairro;
        this.cidade = cidade;
        this.estado = estado;
        this.cep = cep;
        this.produtos = produtos;
        this.telefone = telefone;
        this.celular = celular;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public Integer getCodusuario() {
        return codusuario;
    }

    public void setCodusuario(Integer codusuario) {
        this.codusuario = codusuario;
    }

    public String getCpf() {
        return cpf;
    }

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

    public Date getDatanascimento() {
        return datanascimento;
    }

    public void setDatanascimento(Date datanascimento) {
        this.datanascimento = datanascimento;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getLogradouro() {
        return logradouro;
    }

    public void setLogradouro(String logradouro) {
        this.logradouro = logradouro;
    }

    public String getNome() {
        return nome;
    }

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

    public Integer getNumero() {
        return numero;
    }

    public void setNumero(Integer numero) {
        this.numero = numero;
    }

    public List<Produto> getProdutos() {
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    public String getSenha() {
        return senha;
    }

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

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }

    public String getTelefone() {
        return telefone;
    }

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

}
luxu

posta o faces-config.xml

B
<?xml version='1.0' encoding='UTF-8'?>


<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config>

    <managed-bean>
        <managed-bean-name>cadastroProduto</managed-bean-name>
        <managed-bean-class>br.com.aquaRio.control.ManterCadastroProduto</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <managed-bean-name>cadastroUsuario</managed-bean-name>
        <managed-bean-class>br.com.aquaRio.control.ManterCadastroUsuario</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <managed-bean-name>login</managed-bean-name>
        <managed-bean-class>br.com.aquaRio.control.Login</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

    <managed-bean>
        <managed-bean-name>mdata</managed-bean-name>
        <managed-bean-class>br.com.aquaRio.control.ManterLoginUsuario</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>

        <managed-property>
            <property-name>loginOk</property-name>
            <property-class>java.lang.Boolean</property-class>
            <value>#{login.loginOk}</value>
        </managed-property>
    </managed-bean>

    <!-- =========== NAVEGATION FILE ================================== -->

    <navigation-rule>
        <from-view-id>/index.jsp</from-view-id>

        <navigation-case>
            <from-outcome>index</from-outcome>
            <to-view-id>/index.jsp</to-view-id>
            <redirect/>
        </navigation-case>

        <navigation-case>
            <from-outcome>seclogin</from-outcome>
            <to-view-id>/loginSeguro.jsp</to-view-id>
            <redirect/>
        </navigation-case>

        <navigation-case>
            <from-outcome>secpage</from-outcome>
            <to-view-id>/sistema.jsp</to-view-id>
            <redirect/>
        </navigation-case>
    </navigation-rule>
    
</faces-config>
luxu

no seu método autenticar do bean(UsuarioDAO) no SQL tem dois parâmetros: lg - md5(sen) e por parâmetro vem String login, String senha…tah certo lah?

B

Dei um mole, fiz a query procurar por u,login, mas no banco não estava como login estava como email... troquei ficou assim...

public boolean autenticar(String login, String senha) {
        boolean valid = false;
        q = s.createQuery("from Usuario u where u.email = :lg and u.senha = :md5(sen)");
        q.setString("lg", login);
        q.setString("sen", senha);
        Usuario usuario = (Usuario) q.uniqueResult();
        if (usuario != null) {
            valid = true;
        }
        return valid;
    }

mas agora está dando outro erro....

exception

javax.servlet.ServletException: #{login.validateLogin}: java.lang.NoSuchMethodError: br.com.aquaRio.persistence.UsuarioDao.autenticar(Ljava/lang/String;Ljava/lang/String;)Z
alberthy

Brother...

Não tem nada haver com sua dúvida, mas é bom você passar a utilizar os relacionamentos entre suas entidades...

public class usuario{

   private Integer codusuario;

   private String nome;

   private Endereco endereco;

   private Contato contato;

   // E por ai vai...

   // Getters e Setters....

}

Caso esteja em fase de aprendizado, tudo bem...

Isso é só um toque. Até para seu código ficar mais limpo e fácil de ser lido!

Abraço e bons estudos!

Criado 1 de maio de 2011
Ultima resposta 1 de mai. de 2011
Respostas 10
Participantes 4