Filter e RichFaces

6 respostas
kleins

Pessoal.

Estou tentando implementar um ServletFilter com o RichFaces, mas estou tendo dificuldades.

Me retorna o seguinte erro.

Filter mapping for chameleon filter richfaces do not contain wilcard prefix or suffix

Eu preciso implementar um filter para as paginas ADMIN do meu sistema.

Na impossibilidade de implementar isso via filter, teria alguma outra maneira ?

Valeu !

[]´s

6 Respostas

P

Cara, não sei se tem como, mas vc pode utilizar um Listener do JSF para fazer isso, eu utilizo e funciona muito bem…

kleins

Vc indica alguma doc de como fazer isso ?

Vou procurar no google.

Provisoriamente estou controlando por uma Exception… no inicio de cada pagina JSf eu chamo uma classe pra verificar se existe um determinado objeto no facesContext, se não tiver eu lanço uma Exception customizada e configurei no web.xml pra enviar pra pagina de login caso ocorra o erro…

Será que ta muita “gambiarra” assim ?

abss

valeu

P

Cara eu fiz assim

Classe Listener

package listeners;

import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletRequest;

@SuppressWarnings("serial")
public class LoggedInCheck implements PhaseListener {
 
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
 
    public void beforePhase(PhaseEvent event) {
    }
 
    public void afterPhase(PhaseEvent event) {
        FacesContext facesContext = event.getFacesContext();

//Aqui é testado se a chamada veio da página de login e se é uma chamada para uma área restrita
        Boolean administracao 	= ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getRequestURI().indexOf("/projectcontext/views/administracao/") 	== 0;
        Boolean login 			= ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getRequestURI().indexOf("/projectcontext/views/login/login.jsf") 	== 0;

//Se a área é restrita testa se o usuário está logado
        Boolean logged 			= Boolean.TRUE;
		if (administracao) {
			logged = facesContext.getExternalContext().getSessionMap().get("usuario") != null;
		}
		
//Se a chamada não veio da página de login e não está logado redireciona a chamada para 
//uma navegation rule definida no faces-config.xml
        if(!login && !logged){
			facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null, "logout");
        }
    }
 
}

No faces-config.xml

<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/views/login/logni.jsp</to-view-id>
</navigation-case>
</navigation-rule>

 <!-- Listeners -->
 <lifecycle>
  <phase-listener>listeners.LoggedInCheck</phase-listener>
 </lifecycle>
 <!-- FIM Listeners -->

Ai você faz um managed bean para setar o usuário na sessão.

mateusprado

esse tal de chameleon é um skin do richfaces. verifica ele.altera pra DEFAULT por exmplo. faz alguns teste alterando o skin.pode ser isso

kleins

Pior que eu estou usando o Default mesmo… não to usando este skin…

albama

Pessoal , estava com este problema e resolvi assim

O filtro do rich faces, estava apontado para uma servlet que não existia “Java Faces”
Eu acertei fiz o deploy e funcionou.


Ess é o filtro

Ajax4jsf Filter
ajax4jsf
org.ajax4jsf.Filter

Aqui ele aponta para a servlet : Faces Servlet

<filter-mapping>
	<filter-name>ajax4jsf</filter-name>
	<servlet-name>Faces Servlet</servlet-name>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
	<dispatcher>INCLUDE</dispatcher>
</filter-mapping>

Aqui a servlet

Faces Servlet
javax.faces.webapp.FacesServlet
1

Falta mapear a servlet com o mesmo nome “Faces Servlet” , no meu caso deu certo.

Marco Aurélio

Criado 14 de agosto de 2008
Ultima resposta 29 de nov. de 2008
Respostas 6
Participantes 4