prbpedro 14 de ago. de 2008
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 14 de ago. de 2008
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
prbpedro 14 de ago. de 2008
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 15 de ago. de 2008
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 15 de ago. de 2008
Pior que eu estou usando o Default mesmo… não to usando este skin…
albama 29 de nov. de 2008
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