Login + Logout + JSF + facelets + toplink

4 respostas
Naruto

Bom dia, pessoal, estou tentando implementar uma tela de login em meu sistema, porem não estou conseguindo de forma alguma.
sera que alguem poderia me dar uma ajuda?

Obrigado

4 Respostas

LPJava

bem se vc for mais especifico, ajuda, o que vc nao está conseguindo fazer? apresente suas dificuldades que vamos tentar ajuda-lo.

veja os posts abaixo:
http://camilolopes.wordpress.com/2009/09/02/serie-1-aplicacoes-jee-com-jsf/
http://camilolopes.wordpress.com/2009/05/17/pagina-de-login-senha-jsp-mysql/

sao basicos…

Naruto

outra duvida… eu gostaria de ter dois login eo meu projeto… um para usuarios normais e um para administrador que sera em uma tabela separada ou seja sera uma tabela de usuarios e outra administrador, tem como fazer 2 ou sou obrigado a ter um só? por causa dos mapeamentos no xml ???

vlw

UMC

Naruto:
outra duvida… eu gostaria de ter dois login eo meu projeto… um para usuarios normais e um para administrador que sera em uma tabela separada ou seja sera uma tabela de usuarios e outra administrador, tem como fazer 2 ou sou obrigado a ter um só? por causa dos mapeamentos no xml ???

vlw


Cara eu recomendaria que você fizesse uma tabela só!

NOME, LOGIN,SENHA, TIPO

vlw

Naruto

Bom deixando meio de lado essas coisas, estou com outro problema.... estou tentando colocar o sistema de login que vem como exemplo com o netbeans, porem quando vou executar meu projeto ele se perde no redirecionamento e fica a tela branca... mais pelo que ue olhei os mapeamentos esta tudo correto... vou postar os códigos se alguem puder me ajudar

agradeço

Obrigado.

package autenticacao;

import apresentacao.managedbean.EmpresaManagedBean;
import javax.el.ELContext;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

/**
 * <p>This <code>PhaseListener</code> will be take action before
 * the <code>Restore View</code> phase is invoked.  This allows
 * us to check to see if the user is logged in before allowing them
 * to request a secure resource.  If the user isn't logged in, then
 * the listener will move the user to the login page.</p>
 * @author rlubke
 */
public class AuthenticationPhaseListenerEmpresa implements PhaseListener {
    
    /**
     * <p>The outcome to trigger navigation to the login page.</p>
     */
    private static final String USER_LOGIN_OUTCOME = "loginEmpresa";
       
    // ---------------------------------------------- Methods from PhaseListener

    /**
     * <p>Determines if the user is authenticated.  If not, direct the
     * user to the login view, otherwise all the user to continue to the
     * requested view.</p>
     *
     * <p>Implementation Note: We do this in the <code>afterPhase</code>
     * to make use of the <code>NavigationHandler</code>.</p>
     */
    public void afterPhase(PhaseEvent event) {
        FacesContext context = event.getFacesContext();
       
        if (userExists(context)) {
            // allow processing of the requested view
            return;
        } else {            
            // send the user to the login view
            if (requestingSecureView(context)) {
                context.responseComplete();              
                context.getApplication().
                        getNavigationHandler().handleNavigation(context, 
                                                                null, 
                                                                USER_LOGIN_OUTCOME);
            }
        }
    }

    /**
     * <p>This is a no-op.</p>
     */
    public void beforePhase(PhaseEvent event) {        
    }

    /**
     * @return <code>PhaseId.RESTORE_VIEW</code>
     */
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
    
    // --------------------------------------------------------- Private Methods       
    
    /**
     * <p>Determine if the user has been authenticated by checking the session
     * for an existing <code>Wuser</code> object.</p>
     * 
     * @param context the <code>FacesContext</code> for the current request
     * @return <code>true</code> if the user has been authenticated, otherwise
     *  <code>false</code>
     */
    private boolean userExists(FacesContext context) {
        ExternalContext extContext = context.getExternalContext();
        return (extContext.getSessionMap().containsKey(EmpresaManagedBean.USER_SESSION_KEY));
    }
    
    /**
     * <p>Determines if the requested view is one of the login pages which will
     * allow the user to access them without being authenticated.</p>
     *
     * <p>Note, this implementation most likely will not work if the 
     * <code>FacesServlet</code> is suffix mapped.</p>
     *
     * @param context the <code>FacesContext</code> for the current request
     * @return <code>true</code> if the requested view is allowed to be accessed
     *  without being authenticated, otherwise <code>false</code>
     */
    private boolean requestingSecureView(FacesContext context) {
        ExternalContext extContext = context.getExternalContext();       
        String path = extContext.getRequestPathInfo();
        return (!"/loginEmpresa/loginEmpresa.xhtml".equals(path) && !"/empresa/cadastroEmpresa.xhtml".equals(path));
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio.entidade;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 *
 * @author Jeferson Guerrero
 */
@Entity
@Table(name = "empresa")
@NamedQueries({
    @NamedQuery(name = "Empresa.findByIdEmpresa", query = "SELECT e FROM Empresa e WHERE e.idEmpresa = :idEmpresa"),
    @NamedQuery(name = "Empresa.findByRazaoEmpresa", query = "SELECT e FROM Empresa e WHERE e.razaoEmpresa = :razaoEmpresa"),
    @NamedQuery(name = "Empresa.findByNomeFantasiaEmpresa", query = "SELECT e FROM Empresa e WHERE e.nomeFantasiaEmpresa = :nomeFantasiaEmpresa"),
    @NamedQuery(name = "Empresa.findByCnpjEmpresa", query = "SELECT e FROM Empresa e WHERE e.cnpjEmpresa = :cnpjEmpresa"),
    @NamedQuery(name = "Empresa.findByTelefoneEmpresa", query = "SELECT e FROM Empresa e WHERE e.telefoneEmpresa = :telefoneEmpresa"),
    @NamedQuery(name = "Empresa.findByFaxEmpresa", query = "SELECT e FROM Empresa e WHERE e.faxEmpresa = :faxEmpresa"),
    @NamedQuery(name = "Empresa.findByCelularEmpresa", query = "SELECT e FROM Empresa e WHERE e.celularEmpresa = :celularEmpresa"),
    @NamedQuery(name = "Empresa.findByEmailEmpresa", query = "SELECT e FROM Empresa e WHERE e.emailEmpresa = :emailEmpresa"),
    @NamedQuery(name = "Empresa.findByRamoAtividadeEmpresa", query = "SELECT e FROM Empresa e WHERE e.ramoAtividadeEmpresa = :ramoAtividadeEmpresa"),
    @NamedQuery(name = "Empresa.findBySenhaEmpresa", query = "SELECT e FROM Empresa e WHERE e.senhaEmpresa = :senhaEmpresa"),
    @NamedQuery(name = "Empresa.findByConfirmarSenhaEmpresa", query = "SELECT e FROM Empresa e WHERE e.confirmarSenhaEmpresa = :confirmarSenhaEmpresa")})

    public class Empresa implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "id_empresa", nullable=false)
    @SequenceGenerator(name = "Empresa_Generator", sequenceName="empresa_id_empresa_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Empresa_Generator")
    private Integer idEmpresa;

    @Basic(optional = false)
    @Column(name = "razao_empresa", nullable=false)
    private String razaoEmpresa;

    @Basic(optional = false)
    @Column(name = "nome_fantasia_empresa", nullable=false)
    private String nomeFantasiaEmpresa;

    @Basic(optional = false)
    @Column(name = "cnpj_empresa", nullable=false, unique=true)
    private String cnpjEmpresa;

    @Column(name = "telefone_empresa")
    private String telefoneEmpresa;

    @Column(name = "fax_empresa")
    private String faxEmpresa;

    @Column(name = "celular_empresa")
    private String celularEmpresa;

    @Column(name = "email_empresa", nullable=false, unique=true)
    private String emailEmpresa;

    @Column(name = "ramo_atividade_empresa")
    private String ramoAtividadeEmpresa;

    @Column(name = "senha_empresa", nullable=false)
    private String senhaEmpresa;

    @Column(name = "confirmar_senha_empresa", nullable=false)
    private String confirmarSenhaEmpresa;

    public Empresa() {
    }

    public Empresa(Integer idEmpresa) {
        this.idEmpresa = idEmpresa;
    }

    public Empresa(Integer idEmpresa, String razaoEmpresa, String nomeFantasiaEmpresa, String cnpjEmpresa, String emailEmpresa, String senhaEmpresa, String confirmarSenhaEmpresa) {
        this.idEmpresa = idEmpresa;
        this.razaoEmpresa = razaoEmpresa;
        this.nomeFantasiaEmpresa = nomeFantasiaEmpresa;
        this.cnpjEmpresa = cnpjEmpresa;
        this.emailEmpresa = emailEmpresa;
        this.senhaEmpresa = senhaEmpresa;
        this.confirmarSenhaEmpresa = confirmarSenhaEmpresa;
    }

    public Integer getIdEmpresa() {
        return idEmpresa;
    }

    public void setIdEmpresa(Integer idEmpresa) {
        this.idEmpresa = idEmpresa;
    }

    public String getRazaoEmpresa() {
        return razaoEmpresa;
    }

    public void setRazaoEmpresa(String razaoEmpresa) {
        this.razaoEmpresa = razaoEmpresa.toUpperCase();
    }

    public String getNomeFantasiaEmpresa() {
        return nomeFantasiaEmpresa;
    }

    public void setNomeFantasiaEmpresa(String nomeFantasiaEmpresa) {
        this.nomeFantasiaEmpresa = nomeFantasiaEmpresa.toUpperCase();
    }

    public String getCnpjEmpresa() {
        return cnpjEmpresa;
    }

    public void setCnpjEmpresa(String cnpjEmpresa) {
        this.cnpjEmpresa = cnpjEmpresa;
    }

    public String getTelefoneEmpresa() {
        return telefoneEmpresa;
    }

    public void setTelefoneEmpresa(String telefoneEmpresa) {
        this.telefoneEmpresa = telefoneEmpresa;
    }

    public String getFaxEmpresa() {
        return faxEmpresa;
    }

    public void setFaxEmpresa(String faxEmpresa) {
        this.faxEmpresa = faxEmpresa;
    }

    public String getCelularEmpresa() {
        return celularEmpresa;
    }

    public void setCelularEmpresa(String celularEmpresa) {
        this.celularEmpresa = celularEmpresa;
    }

    public String getEmailEmpresa() {
        return emailEmpresa;
    }

    public void setEmailEmpresa(String emailEmpresa) {
        this.emailEmpresa = emailEmpresa.toLowerCase();
    }

    public String getRamoAtividadeEmpresa() {
        return ramoAtividadeEmpresa;
    }

    public void setRamoAtividadeEmpresa(String ramoAtividadeEmpresa) {
        this.ramoAtividadeEmpresa = ramoAtividadeEmpresa.toUpperCase();
    }

    public String getSenhaEmpresa() {
        return senhaEmpresa;
    }

    public void setSenhaEmpresa(String senhaEmpresa) {
        this.senhaEmpresa = senhaEmpresa;
    }

     public String getConfimarSenhaEmpresa() {
        return confirmarSenhaEmpresa;
    }

    public void setConfimarSenhaEmpresa(String confirmarSenhaEmpresa) {
        this.confirmarSenhaEmpresa = confirmarSenhaEmpresa;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idEmpresa != null ? idEmpresa.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Empresa)) {
            return false;
        }
        Empresa other = (Empresa) object;
        if ((this.idEmpresa == null && other.idEmpresa != null) || (this.idEmpresa != null && !this.idEmpresa.equals(other.idEmpresa))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "negocio.entidade.Empresa[idEmpresa=" + idEmpresa + "]";
    }

}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package apresentacao.managedbean;

import apresentacao.utility.MensagemUtility;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.model.ListDataModel;
import negocio.entidade.Empresa;
import negocio.fachada.EmpresaFachada;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.NoResultException;
import javax.servlet.http.HttpSession;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;

/**
 *
 * @author Jeferson Guerrero
 */
public class EmpresaManagedBean {


    public static final String USER_SESSION_KEY = "user";

    @PersistenceContext
    private EntityManager em;

    private String cnpj;
    private String senha;
    private Integer id;
    private String razao;

    private Empresa empresa;
    private ListDataModel empresas;
    private UIInput senhaInput;

    public void validateSenha(FacesContext context, UIComponent toValidate, Object value) {

        String confirmaSenha = (String) value;
        String senha = (String) this.senhaInput.getLocalValue();

        if (!confirmaSenha.equals(senha)) {
            ((UIInput) toValidate).setValid(false);

            FacesMessage message = new FacesMessage("Senhas não correspondem");
            context.addMessage(toValidate.getClientId(context), message);
        }

    }

    public UIInput getSenhaInput() {
        return senhaInput;

    }

    public void setSenhaInput(UIInput senhaInput) {
        this.senhaInput = senhaInput;

    }

    public Empresa getEmpresa() {
        if (this.empresa == null) {
            this.empresa = new Empresa();
        }
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public ListDataModel getEmpresas() {
        return empresas;
    }

    public void setEmpresas(ListDataModel empresas) {
        this.empresas = empresas;
    }

    public String montarPaginaCadastroEmpresa() {
        this.empresa = new Empresa();
        return "sucesso";
    }

    public String inserir() throws Exception {
        try {
            EmpresaFachada.verificaCnpjCadastrado(this.getEmpresa().getCnpjEmpresa());
            EmpresaFachada.verificaEmailCadastrado(this.getEmpresa().getEmailEmpresa());
            EmpresaFachada.inserir(this.getEmpresa());
            return "sucesso";
        } catch (Exception e) {
            MensagemUtility.adicionarMensagemDeErro("formCadastroEmpresa", e.getMessage());
            return "falha";

        }

    }

    public void recuperarEmpresas() {
        this.empresas = new ListDataModel(EmpresaFachada.listar());
    }

    public String validateUser() {
        FacesContext context = FacesContext.getCurrentInstance();
        Empresa empresaLogin = getEmpresaLogin();
        if (empresaLogin != null) {
            if (!empresaLogin.getSenhaEmpresa().equals(senha)) {
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                           "Login falhou! ",
                                           "A senha informada não está correta");
                context.addMessage(null, message);
                return null;
            }

            context.getExternalContext().getSessionMap().put(USER_SESSION_KEY, empresaLogin);
            return "home";
        } else {
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Login falhou!",
                    " Empresa '"
                    + cnpj
                    +
                    "' não existe");
            context.addMessage(null, message);
            return null;
        }
    }

    public String logout() {
        HttpSession session = (HttpSession)
             FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        if (session != null) {
            session.invalidate();
        }
        return "loginEmpresa";

    }

    private Empresa getEmpresaLogin() {
        try {
            Empresa empresaLogin = (Empresa)
            em.createNamedQuery("Empresa.findByCnpjEmpresa").
                    setParameter("cnpj", cnpj).getSingleResult();
            return empresaLogin;
        } catch (NoResultException nre) {
            return null;
        }
    }

    /**
     * @return the cnpj
     */
    public String getCnpj() {
        return cnpj;
    }

    /**
     * @param cnpj the cnpj to set
     */
    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the id
     */
    public Integer getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * @return the razao
     */
    public String getRazao() {
        return razao;
    }

    /**
     * @param razao the razao to set
     */
    public void setRazao(String razao) {
        this.razao = razao;
    }
}
<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="1.2" 
              xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
     <lifecycle>
        <phase-listener>
            autenticacao.AuthenticationPhaseListenerEmpresa
        </phase-listener>
    </lifecycle>
    <application>
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>    
    <navigation-rule>
        <navigation-case>
            <from-outcome>home</from-outcome>
            <to-view-id>/home.xhtml</to-view-id>
            <redirect/>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <navigation-case>
            <from-outcome>loginAdministrador</from-outcome>
            <to-view-id>/loginAdministrador/loginAdministrador.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <navigation-case>
            <from-outcome>loginEmpresa</from-outcome>
            <to-view-id>/loginEmpresa/loginEmpresa.xhtml</to-view-id>
            <redirect/>
        </navigation-case>
    </navigation-rule>    
    <managed-bean>
        <managed-bean-name>EmpresaManagedBean</managed-bean-name>
        <managed-bean-class>apresentacao.managedbean.EmpresaManagedBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/empresa/cadastroEmpresa.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{EmpresaManagedBean.inserir}</from-action>
            <from-outcome>sucesso</from-outcome>
            <to-view-id>/empresa/cadastroEmpresaSucesso.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/empresa/cadastroEmpresa.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{EmpresaManagedBean.inserir}</from-action>
            <from-outcome>falha</from-outcome>
            <to-view-id>/empresa/cadastroEmpresa.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <navigation-rule>
        <from-view-id>/home.xhtml</from-view-id>
        <navigation-case>
            <from-action>#{EmpresaManagedBean.montarPaginaCadastroEmpresa}</from-action>
            <from-outcome>sucesso</from-outcome>
            <to-view-id>/empresa/cadastroEmpresa.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <validator>
        <validator-id>emailValidator</validator-id>
        <validator-class>validacao.EmailValidator</validator-class>
    </validator>
</faces-config>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <context-param>
        <param-name>org.richfaces.CONTROL_SKINNING</param-name>
        <param-value>enable</param-value>
    </context-param>
    <filter>
        <display-name>RichFaces Filter</display-name>
        <filter-name>richfaces</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>richfaces</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>        
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.xhtml</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            60
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

nossa faz 3 dias que estou nisso

vlw

Criado 3 de abril de 2010
Ultima resposta 4 de abr. de 2010
Respostas 4
Participantes 3