Bom dia,
Eu estou desenvolvendo um software, e tenho uma dúvida em relação acesso do usuário.
Quando o Administrador logar com um usuário e uma senha padrão do sistema pela primeira vez, eu gostaria que ele fosse redirecionado para a janela “Usuários”, a fim de alterar ambos os campos.
A minha dúvida é: Como o sistema vai saber que é a primeira vez que o Administrador entra no sistema?
Grato desde já.
Israel, como maneira paleativa você pode criar uma flag no banco informando se já foi feito primeiro acesso. Essa flag inicia como false e assim que o usuário entrar pode setar ela como true.
Ou seja, quando um usuário se loga você verifica se esta flag está como false para este usuário e redireciona caso esteja. Assim que ele alterar os dados você seta como true para informar que já foi acessado anteriormente.
Tenta isso.
1 curtida
Desculpa, ainda sou meio leigo, o que seria “flag”?
Pelo que pude induzir seria uma variável?
Flag é uma coluna booleana(true/false) ou char(1/0)** que geralmente possui um valor padrão definido. Exemplo: PRIMEIRO_ACESSO com valor padrão FALSE, caso seja um boolean.
A sugestão dada foi de criar uma coluna no banco com um destes dois tipos. Digamos que a coluna PRIMEIRO_ACESSO esteja mapeado na entidade com um método getter chamado boolean isPrimeiroAcesso(). Desta forma, quando o usuário logar, vc verifica o retorno deste método e aplica a regra conforme o retorno. Exemplo:
Usuario usuarioLogado = servico.login(username, password);
if(usuarioLogado.isPrimeiroAcesso())
// redireciona
else
// outra regra qlq
** Não necessariamente a flag precisa ser um boolean ou um char de 0/1. Na empresa que trabalho tenho flag do tipo char com valor P, D, entre outros. Sua regra de negócio define sua flag, O caso sugerido é o mais simples de aplicar e validar.
1 curtida
E ai Israel, conseguiu prosseguir com a solução?
1 curtida
O MySql usa o TINY INT (1) como boolean (só pode 0 e 1). Definindo como false, o phpMyAdmin redefine como 0.
Contexto: Eu tenho um JFrame de Login e outro JFrame Principal. Dentro do Principal, alguns JInternalFrame são abertos, e entre esses está o JInternalFrame Usuário, que é para onde eu quero que o usuário padrão seja redirecionado.
Então eu pensei em criar uma função e chamar ela assim que o usuário logar:
public void primeiroAcesso() {
String sql = "Select * from usuarios";
try {
pst = conexao.prepareStatement(sql);
rs = pst.executeQuery();
if (rs.next()) {
String pa = rs.getString(7); // 7 coluna é o pa (primeiro acesso)
if (pa.equals(0)) {//0 é false
// Aqui está minha dúvida, como eu redireciono o usuário? Não faço ideia de como pego o endereço do JInternalFrame Usuário.
}
} else {
JOptionPane.showMessageDialog(null, "Mensagem qualquer", "Erro", JOptionPane.INFORMATION_MESSAGE);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Banco de Dados não encontrado", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
Israel,
Tenta desta forma.
Primeiro, mude para boolean seu método chamado primeiro acesso. Altere para que este método que busque apenas os dados deste usuário, criando uma cláusula no seu select que compare com o usuário que logou.
Após, ao usuário clicar em logar, implemente um novo método que chame o este primeiroAcesso passando como parâmetro o usuário para você comparar.
Você verifica se é primeiro acesso. Se for, retorna true, senão false.
No método que chamou o primeiroAcesso, faça como abaixo:
if(retorno){
JDesktopPane desktop = new JDesktopPane,();
JInternalFrame internalFrame1 = new JInternalFrame();
desktop.add(internalFrame1);
internalFrame1.setVisible(true);
}else{
JDesktopPane desktop = new JDesktopPane,();
JInternalFrame internalFrame2 = new JInternalFrame();
desktop.add(internalFrame2);
internalFrame2.setVisible(true);
}
1 curtida
Se eu mudo método para boolean ele me dá um erro na chave que o fecha.
public boolean primeiroAcesso() {
String sql = "Select * from usuarios where loginUs=? and senhaUs=?";
try {
pst = conexao.prepareStatement(sql);
pst.setString(1, txtUsuario.getText());
pst.setString(2, txtSenha.getText());
rs = pst.executeQuery();
if (rs.next()) {
String login = rs.getString(4);
String senha = rs.getString(5);
String perfil = rs.getString(6);
// tentei mudar a variável abaixo para boolean mas ainda não consegui resolver o problema do if
boolean pa = rs.getBoolean(7); // 7 coluna é o pa (primeiro acesso)
//Erro nessa condição abaixo: boolean cannot be dereferenced
if (login.equals("admin") && senha.equals("admin") && perfil.equals("Admin") && pa.equals(0)) {//0 é false /->/Condição do primeiro acesso\<-\
// Aqui está minha dúvida, como eu redireciono o usuário? Não faço ideia de como pego o endereço do JInternalFrame Usuário.
System.out.println("teste");
}
} else {
JOptionPane.showMessageDialog(null, "Mensagem qualquer", "Erro", JOptionPane.INFORMATION_MESSAGE);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Banco de Dados não encontrado", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
Se você mudar para booleano deve ter um retorno booleano. E você deveria chamar este método de outro e com o retorno redirecionar.
Mas, tente desta outra forma sem mudar mudar o retorno.
public void primeiroAcesso() {
String sql = "Select * from usuarios where loginUs=? and senhaUs=?";
try {
pst = conexao.prepareStatement(sql);
pst.setString(1, txtUsuario.getText());
pst.setString(2, txtSenha.getText());
rs = pst.executeQuery();
if (rs.next()) {
String login = rs.getString(4);
String senha = rs.getString(5);
String perfil = rs.getString(6);
// tentei mudar a variável abaixo para boolean mas ainda não consegui resolver o problema do if
boolean ehPrimeiroAcesso = rs.getBoolean(7); // 7 coluna é o pa (primeiro acesso)
//Erro nessa condição abaixo: boolean cannot be dereferenced
if (login.equals("admin") && senha.equals("admin") && perfil.equals("Admin")) {//0 é false /-
if(ehPrimeiroAcesso ){
//se for o primeiro acesso você deve instanciar o Frame e colocar com visivel
FrmJanelaUsuarios frame = new FrmJanelaUsuarios();
frame.setVisible(true);
}else{
//se não for chama a outra tela
FrmOutraTela frame = new FrmOutraTela();
frame.setVisible(true);
}
}
} else {
JOptionPane.showMessageDialog(null, "Mensagem qualquer", "Erro", JOptionPane.INFORMATION_MESSAGE);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Banco de Dados não encontrado", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
Perceba que com o código abaixo:
FrmJanelaUsuarios frame = new FrmJanelaUsuarios();
frame.setVisible(true);
Você abre uma Frame (Janela) específica se é o primeiro acesso redireciona para frame FrmJanelaUsuarios .
FrmOutraTela frame = new FrmOutraTela();
frame.setVisible(true);
Caso já tenha logado redireciona para outro.
1 curtida
Não deu para redirecionar, o sistema só abre o frmPrincipal.
Eu estava pensando em mesclar o método primeiroAcesso com o método logar, ficaria assim:
public void logar() {
String sql = "Select * from usuarios where loginUs=? and senhaUs=?";
try {
pst = conexao.prepareStatement(sql);
pst.setString(1, txtUsuario.getText());
pst.setString(2, txtSenha.getText());
rs = pst.executeQuery();
//se existir usuário e senha correspondentes
if (rs.next()) {
String login = rs.getString(4);
String senha = rs.getString(5);
String perfil = rs.getString(6);
boolean ehPrimeiroAcesso = rs.getBoolean(7); // 7 coluna é o pa (primeiro acesso)
//a estrutura abaixo faz o tratamento do perfil do usuário
if (perfil.equals("Admin")) {
// Dentro deste frmPrincipal eu tenho o deskPrincipal, que é onde os JIternalFrame aparecem.
frmPrincipal principal = new frmPrincipal();
principal.setVisible(true);
frmPrincipal.mnuRelatorio.setEnabled(true);
frmPrincipal.mniUsuario.setEnabled(true);
frmPrincipal.lblUsuario.setText(rs.getString(2));//pega o campo 2 da tabela(nomeUs)
frmPrincipal.lblUsuario.setForeground(Color.red);
this.dispose();
if (login.equals("admin") && senha.equals("admin") && perfil.equals("Admin")) {//0 é false /-
if(ehPrimeiroAcesso ){
//se for o primeiro acesso você deve instanciar o Frame e colocar com visivel
JDesktopPane deskPrincipal = new JDesktopPane();
JInternalFrame frmUsuario = new JInternalFrame();
deskPrincipal.add(frmUsuario);
frmUsuario.setVisible(true);
/*frmUsuario frame = new frmUsuario();
frame.setVisible(true);*/
}else{
//se não for chama a outra tela
frmPecas frame = new frmPecas();
frame.setVisible(true);
}
}
} else {
frmPrincipal principal = new frmPrincipal();
principal.setVisible(true);
frmPrincipal.lblUsuario.setText(rs.getString(2));
this.dispose();
}
} else {
JOptionPane.showMessageDialog(null, "Usuário e/ou Senha Inválido(s)", "Erro", JOptionPane.INFORMATION_MESSAGE);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Banco de Dados não encontrado.\nCertifique-se de que o Vertrigo esteja ligado!\n"
+ "Em caso de dúvida entre em contato com a empresa GeralTech.\nTelefone: (35)9 9944-8328", "Erro", JOptionPane.ERROR_MESSAGE);
}
}
Amigo, utilize sempre letras maíusculas em Classes, Frames e afins.
frmPecas frame = new frmPecas();
por
FrmPecas frame = new FrmPecas();
frmPrincipal principal = new frmPrincipal();
por
FrmPrincipal principal = new FrmPrincipal();
Voltando ao problema, a parte de primeiro acesso ao software está OK? Já está validando se é o primeiro acesso (Lembre-se de setar como false esta flag após o primeiro acesso para não entrar novamente) ??
Apresentou algum erro ao não abrir o frame?
Debuga o código e veja se ele entra no seu if ( if(ehPrimeiroAcesso ){)
1 curtida
Sim, está entrando no if,
Não apresentou nenhum erro ao abrir o frame. Está pegando todas as informações no banco de dados.
Quanto ao primeiroAcesso, está validando.
Resultado do Debug:
Porém, ainda não consigo redirecionar.
Cara,
primeiro de tudo dá uma refatorada nas tuas classes e frames e coloca tudo com inicial maiusculo.
Feito isso dentro do teu if adicione o seguinte trecho de código
FrmPrincipal frame = new FrmPrincipal();
frame.setVisible(true);
Isso após o refatoramento.
Ele tem que abrir o frame Principal. Isso se entrar no IF, lógico.
Teste isso.
1 curtida
so uma dica dos especialistas kkkk
so deixe a janela visivel depois que o meu velho amigo processador fazer os calculos, pra nao encher o processa de coisa!
espero que me ajudem no meu canal do youtube:
Hiperciencia Lendaria
espero que visitem o meu site da minha futura empresa:
http://www.starkindustriesepios.org