Login com seção jsf

olá amigos, tenho um sistema com jsf e hibernate e tenho uma login que ta funcionando normal, mais eu queria que quando o usuario fizesse o login,
ele entrasse e tivesse a mensagem Bem vindo: usuario.

o código de login ta aqui, mais não estou entendendo como ta funcionando essa sessão, la no faces config o escopo ta como seção.

public String login() throws Exception{
boolean logado = false;
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
PessoaFacade pessoaService = new PessoaFacadeImpl();

    logado = pessoaService.autentica(this.pessoa.getEmail(), this.pessoa.getSenha());
       
    if(logado){
        session.setAttribute("user", logado);
        rp.sendRedirect(rq.getContextPath() + "/pages/index.jsf");
        return "success";
    }else{
        session.setAttribute("user", null);
        session.removeAttribute("user");
        rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
        return "failure";
    }
}

obrigado!!!

Olá

Ok, poste como está sua página onde deverá aparecer a msg e o ManagedBean correspondente por favor.

Abraço
Daniel.

a minha página é essa, quando eu faço o login aparece só bem vindo: e o usuario não aparece.

<f:view>
<h:form>
<h:messages />

Cadastro de Pessoas Físicas
Bem vindo:<h:outputText value="#{pessoaMB.pessoa.nome}"></h:outputText>
<h:panelGrid>
<h:commandLink value=“Adicionar pessoa” action=“toCadastraPessoa” />
<h:commandLink value=“Pesquisar pessoa” action=“toPesquisaPessoa” />
<h:commandLink value=“Remover pessoa” action=“toRemovePessoa” />
<h:commandLink value=“Atualizar pessoa” action=“toAtualizaPessoa” />
<h:commandLink value=“Sair” action="#{pessoaMB.logout}" />
</h:panelGrid>

</h:form>
</f:view>

a classe manage bean:

public class PessoaMB implements Serializable {

private static final long serialVersionUID = -333995781063775201L;

private Pessoa pessoa = new Pessoa();

private Long id;

public PessoaMB(){
	System.out.println(" >>>>>>>>>>>>>>>>>>>> Contrutor do PESSOA_MB <<<<<<<<<<<<<<<<<<");
	
	if(this.pessoa == null){
		this.pessoa = new Pessoa(); 
	}
}

public String login() throws Exception{
    boolean logado = false;
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    PessoaFacade pessoaService = new PessoaFacadeImpl();
	
    logado = pessoaService.autentica(this.pessoa.getEmail(), this.pessoa.getSenha());
       
    if(logado){
        session.setAttribute("user", logado);
        rp.sendRedirect(rq.getContextPath() + "/pages/index.jsf");
        return "success";
    }else{
        session.setAttribute("user", null);
        session.removeAttribute("user");
        rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
        return "failure";
    }
}

public String logout() {
	HttpServletRequest rq = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
	HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
	FacesContext facesContext = FacesContext.getCurrentInstance();
	HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
	session.invalidate();
	try {
		rp.sendRedirect(rq.getContextPath() + "/pages/login/login.jsf");
	} catch (IOException e) {
		e.printStackTrace();
	}
	
	return "logoutOk";
}

public String save(){
	PessoaFacade pessoaService = new PessoaFacadeImpl();
			
	pessoaService.salva(this.pessoa);
	
	this.pessoa = new Pessoa(); 
	return "cadastraSucesso";
}

public String delete(){
	PessoaFacade pessoaService = new PessoaFacadeImpl();
	this.pessoa.setId(id);
	pessoaService.remove(this.pessoa);
	this.pessoa = new Pessoa(); 
	
	return "removeSucesso";
}

public String merge(){
	PessoaFacade pessoaService = new PessoaFacadeImpl();
	pessoaService.atualiza(this.pessoa);
	this.pessoa = new Pessoa(); 

	return "atualizaSucesso";
}

public String load(){
	PessoaFacade pessoaService = new PessoaFacadeImpl();
	this.pessoa = pessoaService.procura(this.id);
	
	return "pesquisaSucesso";
}

public String pesquisaByNome(){
	PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
	this.pessoa = pessoaService.procuraByNome(this.pessoa.getNome());
	
	return "pesquisaByNomeSucesso";
}

public List<Pessoa> getPessoas(){
	PessoaFacade pessoaService = new PessoaFacadeImpl();		
	
	return pessoaService.lista();
}

public List<Pessoa> getPessoasByNome(){ 
	PessoaFacade pessoaService = new PessoaFacadeImpl();

	List<Pessoa> lista = pessoaService.pesquisaPessoasByNome(this.pessoa.getNome());

	return lista;
}

public Pessoa getPessoa() {
	return pessoa;
}

public void setPessoa(Pessoa pessoa) {
	this.pessoa = pessoa;
}

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

}

o faces-config:

pessoaMB br.com.serjaum.mb.PessoaMB session

Olá,

O que acontece é que voce não está atribuindo a informaçao que precisa ao #{pessoaMB.pessoa.nome} no momento da chamada do metodo login().

Voce precisa no momento do login preencher esse objeto Pessoa pessoa = new Pessoa(); para que assim que a página for carregada, já conter
a informaçao dentro do objeto pessoa mostrando assim a informação na tela.

Entendeu?

Abraços
Daniel.

cara me desculpe mais não entendi, por que sou iniciante, vc poderia me dar um ex?

na minha classe pessoamb está private Pessoa = new Pessoa();
onde tenho que fazer? é no metodo login?

Obrigado!!!

Bem vamos lá :slight_smile:

No método login onde voce faz :
logado = pessoaService.autentica(this.pessoa.getEmail(), this.pessoa.getSenha());

Sugiro que altere isso e passe a retornar um objeto pessoa contendo suas informaçoes em vez de um boolean, ficando assim :
pessoa = pessoaService.autentica(this.pessoa.getEmail(), this.pessoa.getSenha());

Perceba que aqui eu já preencho a referencia do seu objeto Pessoa, assim caso esse objeto tenha um nome ele já será preenchido na tela no momento do carregamento da tela.

aí seu if mudara, para por exemplo :

if(pessoa != null)
// faz A
else
// faz B

Entendeu?

Abraços
Daniel.

Obrigado amigo pela dica, deu certo.