Ajuda login JSF com banco de dados

4 respostas
A

Bom dia pessoal

Tópicos sobre login existem vários mas não consegui nenhum que me ajudasse.

Quero um fazer um login em JSF. Montei a página login.xhtml com o formulário
<html           xmlns="http://www.w3.org/1999/xhtml"
                xmlns:p="http://primefaces.prime.com.tr/ui"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <link type="text/css" rel="stylesheet" href="./resources/css/personalizado.css"/>
        <title><ui:insert name="title">SISP - Sistema Integrado de Saúde Pública</ui:insert></title>
    </h:head>
    <body>
    <h:form >
        <div align="center">
            <br/>
            <br/>
            <br/>
            <p:panel   header="Autenticação de Usuário" style="width: 400PX">
                <p:messages />
                <h:panelGrid columns="2"  cellspacing="15%" >

                    <h:outputText value="Usuário: "/>
                    <h:inputText  value="#{loginBean.usuario.login}" id="us" style="width: 250PX" required="true" requiredMessage="Campo [Usuário] obrigatório"/>

                    <h:outputText value="Senha "/>
                    <h:inputSecret value="#{loginBean.usuario.senha}" id="sen" style="width: 250PX" required="true" requiredMessage="Campo [Senha] obrigatório"/>

                </h:panelGrid>
                <h:commandButton value="OK" title="Ok"  action="#{loginBean.verificarUsuario}"  style="width: 100PX" />
                <h:commandButton value="Cancela" style="width: 100PX" />
            </p:panel>
        </div>
    </h:form>
</body>

</html>
Como dá pra ver os campos estão ligados ao bean loginBean
//imports ocultados
@ManagedBean
public class loginBean {

    Connection conexao = new FabricaConexao().fazConexao(); //Cria uma nova conexao  ao banco de dados
    //cria um novo objeto(modelo) usuario e seus gets e sets
    Usuario usuario = new Usuario();

    public Usuario getUsuario() {
        return usuario;
    }

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

    ////////////////////////////
    public List<Usuario> getusuarios() throws SQLException {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        String sql = "select idpermissao, login, senha from usuario where login=? and senha=?";

        PreparedStatement stmt;

        stmt = this.conexao.prepareStatement(sql);
        stmt.setString(1, getUsuario().getLogin());
        stmt.setString(2, getUsuario().getSenha());

        ResultSet rs = stmt.executeQuery();


        try {
            while (rs.next()) {
                Usuario usuario = new Usuario();
                int idpermissao = rs.getInt("idpermissao");
                String login = rs.getString("login");
                String senha = rs.getString("senha");

                usuario.setIdpermissao(idpermissao);
                usuario.setLogin(login);
                usuario.setSenha(senha);

                usuarios.add(usuario);
            }

           
        } catch (SQLException ex) {
            Logger.getLogger(loginBean.class.getName()).log(Level.SEVERE, null, ex);
        }

        return usuarios;
    }

    public String verificarUsuario() {
        if (isUsuarioValido(null, null)) {
            return "sucesso";
        } else {
            return "erro";
        }
    }

    //Métodos responsáveis pela validação de usuários, login
    public static boolean isUsuarioValido(String login, String senha) {
        String user = null;
        String pass = "null";

        if ((login.equals(user)) && (senha.equals(pass))) {
            return true;
        }

        return false;
    }
}

Criei uma lista pra me retornar somente o usuário que contenha login e senha iguais ao informado, os métodos verificarUsuario e isUsuarioValido foram utilizados de um exemplo que achei na net, o problema é que eu travei na hora de comparar se o valor informado na página é igual ao retornado na lista.

Não sei se esta forma está correta.
Desde já obrigado.

4 Respostas

S

Saudações,

Já pensou em usar Jaas? Se vc estiver utilizando Jboss eu posso ajudar.

M

Observe que o atributo usuario e senha serão autamaticamente preenchidos poiis estão referenciados no h:inputText, então basta passá-lo para o método isUsuarioValido.
Veja se é isso:

public String verificarUsuario() {
          //passando aqui o usuário e a senha do objeto usuario.
        if (isUsuarioValido(getUsuario().getLogin(), getUsuario().getSenha())) {
            return "sucesso";
        } else {
            return "erro";
        }
    }

    //Métodos responsáveis pela validação de usuários, login
    public static boolean isUsuarioValido(String login, String senha) {
        //definindo o usuário e a senha para acesso a aplicação
        String user = "adm";
        String pass = "adm";

        if ((login.equals(user)) && (senha.equals(pass))) {
            return true;
        }

        return false;
    }
B

Olá,

Fiz um exemplo de login completo aqui:

http://benignosales.wordpress.com/2010/06/09/tela-de-login-com-jsf-richfaces-e-filtro-parte-1/

Veja se ajuda,

abraços

A

Agradeço a atenção de todos

shibby, já dei uma olhada em JAAS sim, mas não to tenho tempo hábil para implementar agora, tenho que terminar o projeto para o meu TCC.

marcos1EM, pelo que entendi as variáveis user e pass continuam sendo constantes. Não sei se expliquei mal mas eu quero verificar se o usuário e login passados pelo cliente do sistema existem no banco de dados, se vc olhar na lista vai ver que tem um campo idpermissão que vai me dizer onde cada usuário terá permissão de acesso.
Você sabe como fazer isso?

benignoms, estou vendo seu artigo, é bastante interessante só não sei se vou conseguir implementar, se vc tiver alguma sugestão para implementar a minha classe eu agradeço.

Criado 18 de novembro de 2010
Ultima resposta 18 de nov. de 2010
Respostas 4
Participantes 4