Pegar usuario logado.

Java

13/06/2011

Colegas,
tenho o formulario de login com os campos login e senha.
este é meu codigo no botão salvar e esta funcionando.

private void btnConfirmarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
        
         if ("".equals(txtNome.getText())) {
            JOptionPane.showMessageDialog(this, "Name is requeried");
            txtNome.requestFocus();
        }

        int resp = JOptionPane.showConfirmDialog(this, "Are you sure ?", "Add new Animal", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (resp == 2) {
            return;
        }
                
        try {
            Usuario usr = new Usuario();
            Fornecedor Fornecedor=  new Fornecedor();
            Fornecedor.setIdforn(Integer.parseInt(txtCodigo.getText()));
            Fornecedor.setNome(txtNome.getText());
            Fornecedor.setEndereco(txtEndereco.getText());
            Fornecedor.setNumero(Integer.parseInt(txtNumero.getText()));
            Fornecedor.setComplemento(txtComplemento.getText());
            Fornecedor.setBairro(txtBairro.getText());
            Fornecedor.setCidade(txtCidade.getText());
            Fornecedor.setInscEstadual(Integer.parseInt(txtInscricao.getText()));
            Fornecedor.setTelefone(txtTelefone.getText());
            Fornecedor.setEmail(txtEmail.getText());
            Fornecedor.setUsuario(usr.getIdusuario());
            Fornecedor.setOpr(opr);
            forn.addFornecedor(Fornecedor);
            
           desativar();  
            
        } catch (Exception e) {
            
             e.printStackTrace();
            JOptionPane.showMessageDialog(this, "Erro ao tentar adicionar um fornecedor, corriga os dados "
                    + "e tente novamente !");
            return;
        }


Mas eu gostaria de pegar o usuario logado, ou seja, para entrar no meu sistema eu uso o frmLogin com os campos acima. O problema é que tenho que pegar o usuario logado e passar para a linha   
 Fornecedor.setUsuario(usr.getIdusuario());
   
e do jeito que esta não pega o usuario.
Podem me dar uma ajuda?
Nilo Souza

Nilo Souza

Curtidas 0

Respostas

Davi Costa

Davi Costa

13/06/2011

O interessante seria vc pegar o login e senha e ver se esse usuário existe em alguma base, quando verificasse  se ele existisse na base pegava odos seus atributos e preencheria esse usuário que vc passaria em ao Fornecedor.
Esse método setUsuario() recebe um Usuario ou só o id dele? O interessante tb seria que recebesse o Usuario inteiro, lembresse java é orientado a objeto.

att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

É isso que pensei, e o meu frmLogin verifica o usuario, mas a problema e pegar esse usuario. Tenho que instanciar essa classe no formulário Fornecedor?  Tipo Usuario usr = new Usuario(),  
 usr.setUsuario(" (O que coloco aqui) " );
  depois retorno o usuario     [code] forn.setUsuario(usr.getUsuario()) [code]   Mas pegar esse usuario do formulario de login que não sei fazer, entendeu?
GOSTEI 0
Davi Costa

Davi Costa

13/06/2011

Ok, seguinte no momento que vc loga vai fazer uma consulta no banco se for sucesso vc guarda esse usuário, como um atributo de classe ou de uma forma que vc achar melhor, vc vai ter esse usuário todo preenchido conforme ele está no banco. Na tela no momento que o usuário prencher login e senha vc pega esses valores do fields e faz uma consulta no banco para recuperar um usuário que possua esse login e senha digitados na tela se o resultado for vazio a app fica parada na mesma tela pois o usuário ou a senha estão errados. No caso de sucesso vc recupera todos os campos desse usuário e joga em um objeto usuário na sua app, uma vez recuperado esse usuário vc dá um setUsuario passando esse usuário uqe teve seus campos preenchidos conforme consulta do banco.
Ai vai depender se vc usa jdbc uro ou jpa (hibernate ou outra impelemntação como toplink e por ai vai) para realizar o preenchimento desse usuário que vc vai passar para o fornecedor


att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

Na teoria eu entendo tudo. Mas imagina o seguinte? 1 - Acabei de logar, chequei e o usuario existe, entro e logo depois meu formulario frmLogin esta invisivel. 2 - Meu formulario principal é aberto 3 - Clico no menu e escolho "Fornecedor" 4 - Abre o formulario Cadastro de Fornecedor (E não se esqueça que o formulario frmLogin esta aberto, porém invisivel) 5 - No botão salvar tem o codigo que coloquei no primeiro post.   Agora preciso pegar o que esta digitado no campo login "nsouza" do frmLogin, pesquisar no banco o meu ID e colocar no for.setusuario(). Isso que tenho dificuldade para fazer, embora entendo na teoria. Entendeu minha duvia melhor agora? Um abraço!  
GOSTEI 0
Dyego Carmo

Dyego Carmo

13/06/2011

Crie um singleton e armazene o usuario logado , assim vc tem acesso a ele de qualquer lugar da aplicação :)
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

Tem algum material ou apostila que posso me guiar a como construir esse singleton. (Sou iniciante)
GOSTEI 0
Davi Costa

Davi Costa

13/06/2011

Vc via criar uma classe com o construtor padrão privado, e um método estático que retorne sua instância que chama o construtor padrão apenas uma vez. Para que ele chame o construtor padrão apenas uma vez vc verifica nesse método estático se essa instância dele mesmo está nula.

Se não entendeu bem posso te mandar códigos de exemplo para vc ver

att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

Se não for pedir muito, gostaria sim! É o que disse, eu entendo, soa familiar os termos, mas tenho dificuldade em colocar na pratica. Segui as videos aulas do Dyego e foram boas, mas não gostaria de ficar preso somente ao que estudei. Será de grande ajuda se puder me enviar o código. Desde já agradeço.
GOSTEI 0
Davi Costa

Davi Costa

13/06/2011

/**
 *
 * @author Costa
 * @since
 */
public class SingletonUtil {

    private static final long serialVersionUID = 1L;
    private static SingletonUtil me;
    private Usuario usuario;

    /**
     * Construtor padrão
     *
     * @author Costa
     * @version 1.0,
     */
    private SingletonUtil(){
    }


    public Usuario getUsuario() {
        return usuario;
    }

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

    public static SingletonUtil getInstance() {
        if (me== null){
            me = new SingletonUtil();
        }
        return me;
    }

}



Quando vc precisar chamar ou setar esse usuario basta fazer SingletonUtil.getInstance().getUsuario() ou
SingletonUtil.getInstance().setUsuario(usuario)

Att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

Deixa eu ver se entendi.
O codigo abaixo ficaria conforme abaixo. Ele mesmo já identificaria o usuario logado ou no frmLogin eu teria
que setar algum valor?



 Usuario usr = new Usuario();
            Fornecedor Fornecedor=  new Fornecedor();
            Fornecedor.setIdforn(Integer.parseInt(txtCodigo.getText()));
            Fornecedor.setNome(txtNome.getText());
            Fornecedor.setEndereco(txtEndereco.getText());
            Fornecedor.setNumero(Integer.parseInt(txtNumero.getText()));
            Fornecedor.setComplemento(txtComplemento.getText());
            Fornecedor.setBairro(txtBairro.getText());
            Fornecedor.setCidade(txtCidade.getText());
            Fornecedor.setInscEstadual(Integer.parseInt(txtInscricao.getText()));
            Fornecedor.setTelefone(txtTelefone.getText());
            Fornecedor.setEmail(txtEmail.getText());
            Fornecedor.setUsuario(SingletonUtil.getInstance().getUsuario() );
            Fornecedor.setOpr(opr);
            forn.addFornecedor(Fornecedor);


GOSTEI 0
Davi Costa

Davi Costa

13/06/2011

Quando vc se logar vc vai guardar o registro desse usuário logado após sucesso obviamente no login e senha passados por ele da seguinte forma :

SingletonUtil.getInstance().setUsuario(usuario)

Lembrando que esse usuário é o que foi preenchido com os atributos do banco
Att Davi


GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

Caro colega, não deu certo.
Fiz dessa forma:

No frmLogin:
try {
           boolean valid = dao.validaUsuarioLogin(txtUsuario.getText(), txtSenha.getText());
           
            //Retorna a mensagem se o valor for falso
            if (!valid ){
                JOptionPane.showMessageDialog(this,"Login/Password invalid !","Login/Password invalid !",JOptionPane.ERROR_MESSAGE);
                return;
            }
            setVisible(false);
            new frmPrincipal().setVisible(true);
            
            SingletonUtil.getInstance().setUsuario(usr);
            
        } catch (SQLException ex) {
            Logger.getLogger(frmLogin.class.getName()).log(Level.SEVERE, null, ex);
        }



No botão salvar do formulario de fornecedor


try {
            
         Fornecedor Fornecedor=  new Fornecedor();
            Fornecedor.setIdforn(Integer.parseInt(txtCodigo.getText()));
            Fornecedor.setNome(txtNome.getText());
            Fornecedor.setEndereco(txtEndereco.getText());
            Fornecedor.setNumero(Integer.parseInt(txtNumero.getText()));
            Fornecedor.setComplemento(txtComplemento.getText());
            Fornecedor.setBairro(txtBairro.getText());
            Fornecedor.setCidade(txtCidade.getText());
            Fornecedor.setInscEstadual(Integer.parseInt(txtInscricao.getText()));
            Fornecedor.setTelefone(txtTelefone.getText());
            Fornecedor.setEmail(txtEmail.getText());
            Fornecedor.setUsuario(SingletonUtil.getInstance().getUsuario().getIdusuario());
            Fornecedor.setOpr(opr);
            forn.addFornecedor(Fornecedor); 
            
           
            limpaCampo();
            desativar();
             
             
        } catch (Exception e) {
            
            JOptionPane.showMessageDialog(this, "Erro ao tentar adicionar um fornecedor, corriga os dados "
                    + "e tente novamente !");
            return;
        }




No caso em questão setUsuario, pede um inteiro, por isso eu passei o
 SingletonUtil.getInstance().getUsuario().getIdusuario() 
. Esse campo não é chave estrangeira pois apenas guardo o id do usuário para a tabela de log.
GOSTEI 0
Davi Costa

Davi Costa

13/06/2011

Nilo não vi vc preencher o usuario conforme seu login e senha só vi vc utilizar um método que retorna um boolean
e passa um:

SingletonUtil.getInstance().setUsuario(usr);

Mas como usr foi preenchido?
No momento que valida o usuário vc deveria preencher o usuário, vc pode fazer isso de vários modos um modo simples é que esse método retorne um usuário ao invez do boolean ai vc verificar se o usuário é diferente de nulo para validar o login.

Posta sua classe SingletonUtil tb.

att Davi
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

Meu botão Acessar no formulario login

private void btnAcessarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        
           try {
           boolean valid = dao.validaUsuarioLogin(txtUsuario.getText(), txtSenha.getText());
           
            //Retorna a mensagem se o valor for falso
            if (!valid ){
                JOptionPane.showMessageDialog(this,"Login/Password invalid !","Login/Password invalid !",JOptionPane.ERROR_MESSAGE);
                return;
            }
            setVisible(false);
            new frmPrincipal().setVisible(true);
            
            SingletonUtil.getInstance().setUsuario(usr);
            
        } catch (SQLException ex) {
            Logger.getLogger(frmLogin.class.getName()).log(Level.SEVERE, null, ex);
        }
    }                 


Minha classe singleton (copiei a que me deu)

package treinamento.funcoes;

import treinamento.entidade.Usuario;

/**
 *
 * @author nsouza
 */
public class SingletonUtil {
      

    private static final long serialVersionUID = 1L;
    private static SingletonUtil me;
    private Usuario usuario;

    /**
     * Construtor padrão
     *
     * @author Costa
     * @version 1.0,
     */
    private SingletonUtil(){
    }


    public Usuario getUsuario() {
        return usuario;
    }

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

    public static SingletonUtil getInstance() {
        if (me== null){
            me = new SingletonUtil();
        }
        return me;
    }

}



Botão confirmar do formulario de fornecedor (Salva os registros no banco)
 
private void btnConfirmarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        // TODO add your handling code here:
        
        if ("".equals(txtNome.getText())) {
            JOptionPane.showMessageDialog(this, "Name is requeried");
            txtNome.requestFocus();
        }
        
        int resp = JOptionPane.showConfirmDialog(this, "Are you sure ?", "Add new Animal", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (resp == 2) {
            return;
        }
        
        try {
            
         Fornecedor Fornecedor=  new Fornecedor();
            Fornecedor.setIdforn(Integer.parseInt(txtCodigo.getText()));
            Fornecedor.setNome(txtNome.getText());
            Fornecedor.setEndereco(txtEndereco.getText());
            Fornecedor.setNumero(Integer.parseInt(txtNumero.getText()));
            Fornecedor.setComplemento(txtComplemento.getText());
            Fornecedor.setBairro(txtBairro.getText());
            Fornecedor.setCidade(txtCidade.getText());
            Fornecedor.setInscEstadual(Integer.parseInt(txtInscricao.getText()));
            Fornecedor.setTelefone(txtTelefone.getText());
            Fornecedor.setEmail(txtEmail.getText());
            Fornecedor.setUsuario(SingletonUtil.getInstance().getUsuario().getIdusuario());
            Fornecedor.setOpr(opr);
            forn.addFornecedor(Fornecedor); 
            
           
            limpaCampo(); //Função para limpar os campos no formulario
            desativar(); //Função para desativar os campos
             
             
        } catch (Exception e) {
            
            JOptionPane.showMessageDialog(this, "Erro ao tentar adicionar um fornecedor, corriga os dados "
                    + "e tente novamente !");
            return;
        }     
        
    }                              


GOSTEI 0
Davi Costa

Davi Costa

13/06/2011

Por esse código que vc postou vc não preencheu o usuário com os campos login e senha ou conforme o usuário do banco. Seu sigleton está 100%, o que precisa é pegar esse usuário da base e seu respectivo id.


private void btnAcessarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
       
           try {
           boolean valid = dao.validaUsuarioLogin(txtUsuario.getText(), txtSenha.getText());
          
            //Retorna a mensagem se o valor for falso
            if (!valid ){
                JOptionPane.showMessageDialog(this,"Login/Password invalid !","Login/Password invalid !",JOptionPane.ERROR_MESSAGE);
                return;
            }
            setVisible(false);
            new frmPrincipal().setVisible(true);
           
            SingletonUtil.getInstance().setUsuario(usr);
           
        } catch (SQLException ex) {
            Logger.getLogger(frmLogin.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

Entendi, e isso faz parte da pergunta do meu primeiro tópico. Como pegar e jogar nesse singleton?
Tentei passar o campo do formulário e não deu certo.
GOSTEI 0
Nilo Souza

Nilo Souza

13/06/2011

[RESOLVIDO]
GOSTEI 0
Davi Costa

Davi Costa

13/06/2011

Show de bola Nilo parabéns!

Fvaor assim qu possível fechar o post

att Davi
GOSTEI 0
POSTAR