1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Autorizador com phaseListener não funciona

Olá estou tentando implementar um Autorizador seguindo a apostila da caelum mas, a classe Autorizador não consegue injetar o usuarioLogadoBean.

Meu Autorizador.

package la.foton.caixa.sigct.interceptor;

import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.inject.Inject;

import la.foton.caixa.sigct.bean.UsuarioLogadoBean;

public class Autorizador implements PhaseListener {

    @Inject
    private UsuarioLogadoBean usuarioLogado;

    @Override
    public void afterPhase(PhaseEvent event) {

        FacesContext context = event.getFacesContext();

        if ("/login.xhtml".equals(context.getViewRoot().getViewId())) {
            return;
        }

        if (!usuarioLogado.isLogado()) {
             NavigationHandler handler = context.getApplication()
             .getNavigationHandler();

             handler.handleNavigation(context, null, "login");

             context.renderResponse();
        }

    }

    @Override
    public void beforePhase(PhaseEvent arg0) {

    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }

}

UsuarioLogadoBean

package la.foton.caixa.sigct.bean;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import la.foton.uql.sigct.estrutura.Usuario;

@Named
@SessionScoped
public class UsuarioLogadoBean implements Serializable {

    private Usuario usuario;

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

    public String deslogar() {
        this.usuario = null;
        return "login?faces-redirect=true";
    }

    public Usuario getUsuario() {
        return usuario;
    }

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

    public boolean isLogado(){
        return usuario!=null;
    }

}

LoginBean

package la.foton.caixa.sigct.bean;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import la.foton.caixa.sigct.rn.DadosUsuarioLogin;
import la.foton.uql.sigct.estrutura.Usuario;

@Named
@RequestScoped
public class LoginBean {

    @Inject
    private Usuario usuario;    

    @Inject
    UsuarioLogadoBean usuarioLogado;
    @Inject 
    DadosUsuarioLogin dadosUsuario;

    public String efetuaLogin(){
        boolean loginValido = dadosUsuario.existe(usuario);
        if(loginValido){
            usuarioLogado.logar(usuario);
            return "home?faces-redirect=true";
        }else{
            usuarioLogado.deslogar();
            return "login";
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }    

}

Usuario

package la.foton.uql.sigct.estrutura;

import java.io.Serializable;

public class Usuario implements Serializable{

    private String login;
    private String senha;

    public String getLogin() {
        return login;
    }
    public void setLogin(String login) {
        this.login = login;
    }
    public String getSenha() {
        return senha;
    }
    public void setSenha(String senha) {
        this.senha = senha;
    }



}

Ao acessar o sistema na URL login.xhtml funciona, mas qualquer outra url ele dá erro pois, o usuarioLogadoBean é null no if do after phase.

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/fotonsigct].[Faces Servlet]] (http-localhost/127.0.0.1:8080-1) JBWEB000236: Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException
    at la.foton.caixa.sigct.interceptor.Autorizador.afterPhase(Autorizador.java:26) [classes:]
    at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189) [jsf-impl-2.1.19-redhat-2.jar:2.1.19-redhat-2]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107) [jsf-impl-2.1.19-redhat-2.jar:2.1.19-redhat-2]
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.19-redhat-2.jar:2.1.19-redhat-2]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.19-redhat-2.jar:2.1.19-redhat-2]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.1.19.1.Final-redhat-1.jar:2.1.19.1.Final-redhat-1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) [jboss-as-web-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_67]

Quem puder me ajudar agradeço desde já.

Consegui resolver da seguinte Forma.

No lugar de injetar o usuarioLogado eu peguei ele pelo contexto.

UsuarioLogadoBean usuarioLogado = context.getApplication()
        .evaluateExpressionGet(context, "#{usuarioLogadoBean}",
                UsuarioLogadoBean.class);
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java jsf cdi ou faça a sua própria pergunta.