Solicitar troca de senha no login

Boa tarde a todos,

Estou montando um projeto acadêmico e estou com uma dúvida e gostaria se possível de contar com a colaboração dos amigos do fórum.
Pois bem, no sistema o usuário vai utilizar o CPF como login e setei no banco a senha inicial como “123456”. Em primeiro lugar teste pra ver se o sistema logava, depois montei as permissões a partir de papéis atribuído ao usuário e tudo funciona bem.
Agora não estou conseguindo fazer com que caso a senha digitada pelo usuário seja igual a “123456” ele direcione para a jsp que montei para a troca de senha. Tentei fazer as comparações do campo de senha mas deu erro. Alguém tem alguma sugestão? Segue o código do Servlet do login.

Abraços

package br.com.odontbasic.controle;

import java.io.IOException;
import java.util.Arrays;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.odontbasic.exception.EmailException;
import br.com.odontbasic.mail.MailSender;
import br.com.odontbasic.mail.TipoEmail;
import br.com.odontbasic.modelo.Pessoa;
import br.com.odontbasic.modelo.dao.DentistaDao;
import br.com.odontbasic.modelo.dao.InstrumentistaDao;
import br.com.odontbasic.modelo.dao.PacienteDao;
import br.com.odontbasic.modelo.dao.PessoaDao;
import br.com.odontbasic.modelo.dao.SecretariaDao;
import br.com.odontbasic.modelo.enums.PapelEnum;

public class LoginServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = null;
        String acao = request.getParameter("acao") + "";
        
        if(acao.equalsIgnoreCase("LOGOUT")) {
            dispatcher = logout(request);
        } else {
            acaoInvalida(request, response);
            return;
        }
        dispatcher.forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        RequestDispatcher dispatcher = null;
        String acao = request.getParameter("acao") + "";
        
        if(acao.equalsIgnoreCase("LOGIN")) {
            dispatcher = login(request);
        } else if(acao.equals("ENVIO_SENHA")) {
        	dispatcher = enviarSenha(request, response);
        } else {
            acaoInvalida(request, response);
            return;
        }
        dispatcher.forward(request, response);
    }
    
    private RequestDispatcher login(HttpServletRequest request) {
        PessoaDao pessoaDao = new PessoaDao();
        Pessoa pessoa = pessoaDao.obterPorCpfESenha(request.getParameter("cpf"), request.getParameter("senha"));
        
        if(pessoa != null) {
        	if(pessoa.isAdmin()) {
        		//Se for admin, usuario passa a ter todos os papeis
        		pessoa.getPapeis().addAll(Arrays.asList(PapelEnum.values()));
        	} else {
        		//Verificando se pessoa é um paciente e atribui o papel correspondente
        		PacienteDao pacienteDao = new PacienteDao();
        		Pessoa paciente = pacienteDao.obterPorIdPessoa(pessoa.getIdPessoa());
        		if(paciente != null) {
        			pessoa.getPapeis().add(PapelEnum.PACIENTE);
        		}
        		//Verificando se pessoa é uma instrumentista e atribui o papel correspondente
        		InstrumentistaDao instrumentistaDao = new InstrumentistaDao();
        		Pessoa instrumentista = instrumentistaDao.obterPorIdPessoa(pessoa.getIdPessoa());
        		if(instrumentista!= null){
        			pessoa.getPapeis().add(PapelEnum.INSTRUMENTISTA);
        		
        		}
        		//Verificando se pessoa é um dentista e atribui o papel correspondente
        		DentistaDao dentistaDao = new DentistaDao();
        		Pessoa dentista = dentistaDao.obterPorIdPessoa(pessoa.getIdPessoa());
        		if(dentista != null) {
        			pessoa.getPapeis().add(PapelEnum.DENTISTA);
        			pessoa.getPapeis().add(PapelEnum.SECRETARIA);
        		}
        		//Verificando se pessoa é uma secretaria e atribui o papel correspondente
        		SecretariaDao secretariaDao = new SecretariaDao();
        		Pessoa secretaria = secretariaDao.obterPorIdPessoa(pessoa.getIdPessoa());
        		if(secretaria != null) {
    				pessoa.getPapeis().add(PapelEnum.DENTISTA);
    				pessoa.getPapeis().add(PapelEnum.SECRETARIA);
        		}
        	}
        	if(!pessoa.getPapeis().isEmpty()) {
	            request.getSession().setAttribute("usuarioLogado", pessoa);
	            return request.getRequestDispatcher("/dinamico/index.jsp");
        	}
        }
        request.setAttribute("mensagem", "Usuario desativado ou Dados Invalidos.");
        return request.getRequestDispatcher("/login.jsp");
    }
    
    private RequestDispatcher enviarSenha(HttpServletRequest request, HttpServletResponse response) {
    	try {
	    	String cpf = request.getParameter("cpf");
	    	PessoaDao pessoaDao = new PessoaDao();
	        Pessoa pessoa = pessoaDao.obterPorCpf(cpf);
	        MailSender sender = new MailSender();
			sender.enviar(TipoEmail.ENVIO_SENHA, pessoa.getEmail(), new Object[] { pessoa.getSenha() });
			request.setAttribute("mensagem", "A senha foi enviada para o email " + pessoa.getEmail() + ".");
	        return request.getRequestDispatcher("/login.jsp");
		} catch (EmailException e) {
			e.printStackTrace();
			return request.getRequestDispatcher("/login.jsp?erro=3");
		}
    }
    
    private RequestDispatcher logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return request.getRequestDispatcher("/login.jsp");
    }
    
    private void acaoInvalida(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.sendRedirect(request.getContextPath() +  "/login.jsp?erro=2");
        return;
    }
}

Explica melhor, é somente com a senha 123456 ou vc não está conseguindo colocar nenhuma senha?!

Qual é o JSP que vc está direcionando?

Vc não está conseguindo ALTERAR a senha ou não está conseguindo CADASTRAR a senha?!

O usuário quando cadastro tem o seu CPF atribuído como nome de usuário e a senha inicial definida como 123456. Eu quero fazer com que o usuário no seu primeiro login tenha que alterar essa senha. Tenho que fazer uma comparação da senha pra saber se ela é igual a senha inicial (123456) e caso seja ele redireciona para uma jsp que fiz onde o usuário terá que definir a nova senha e aí o sistema faz o update no banco alterando a senha.

Só não sei exatamente onde colocar esse if e como chamar essa jsp, se por response, por redirect etc…

[quote=alancarlos_rj]O usuário quando cadastro tem o seu CPF atribuído como nome de usuário e a senha inicial definida como 123456. Eu quero fazer com que o usuário no seu primeiro login tenha que alterar essa senha. Tenho que fazer uma comparação da senha pra saber se ela é igual a senha inicial (123456) e caso seja ele redireciona para uma jsp que fiz onde o usuário terá que definir a nova senha e aí o sistema faz o update no banco alterando a senha.

Só não sei exatamente onde colocar esse if e como chamar essa jsp, se por response, por redirect etc…[/quote]

hmm… Entendi!

Faz o seguinte, cria um método que verifique se a senha é 123456.

Cria uma String para tu colocar dentro do getRequestDispatcher

aí vc faz um IF pra verificar a senha através do método, entendeu?

recomendo criar uma flag, usuarioInicial boolean, algo do tipo pois se por acaso, depois ele for mudar a senha e escolher “123456” ? rs

Criei um método no meu ServletAdmin dessa forma:

 protected RequestDispatcher alterarSenha(HttpServletRequest request) {
    	return editar(request, "/alterarsenha.jsp");
    }

No LoginServlet coloquei o seuinte if:

 if (pessoa.getSenha().equals("123456")){
        	return request.getRequestDispatcher("/alterarsenha.jsp");
          }

Bom, ainda não funciona, mas agora dá erro 404. Não sei se estou apontando errado ou usando recurso errado.

Acho que é esse getSenha, não vai dar certo mesmo

Ele não está se referenciando a ninguem…

Vc tem que criar um método que pegue o login request, verifique a senha no banco

aí vc retorna um boolean

aí vc coloca esse if com o boolean dentro.