Boa noite, pessoal, seguinte coloquei um exemplo de PhaseListener que peguei do exemplo do netbeans e outros que achei na net para fazer um filtro para autenticação, porem quando eu declaro ele no faces config a minha aplicação não roda ele apenas fica uma pagina em branco ao inves de redirecionar para minha pagina principal… o home, e se eu ponho parece que o browser entra em loop infinito e ja tentei varios e ainda não consegui resolver
alguem pode me ajudar?
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.
@author rlubke
*/
public class AuthenticationPhaseListenerEmpresa implements PhaseListener {
/**
The outcome to trigger navigation to the login page.
*/
private static final String USER_LOGIN_OUTCOME = “loginEmpresa”;
// ---------------------------------------------- Methods from PhaseListener
/**
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.
Implementation Note: We do this in the afterPhase
to make use of the NavigationHandler.
*/
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);
}
}
}
/**
This is a no-op.
*/
public void beforePhase(PhaseEvent event) {
}
/**
@returnPhaseId.RESTORE_VIEW
*/
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
Ola Paulo, boa noite, se eu faço isso ele ja me redireciona logo para a pagina de login e não é isso que eu quero pois quero acessar uma pagina inicial onde qualquer um pode ver e dali tem um menu onde leva ele ate o login e outro problema que aconteceu fazendo isso foi que ele me redireciona para a pagina de login e não sai dali mesmo eu tentando acessar outras opções ele so fica na pagina de login
[quote=Naruto]Ola Paulo, boa noite, se eu faço isso ele ja me redireciona logo para a pagina de login e não é isso que eu quero pois quero acessar uma pagina inicial onde qualquer um pode ver e dali tem um menu onde leva ele ate o login e outro problema que aconteceu fazendo isso foi que ele me redireciona para a pagina de login e não sai dali mesmo eu tentando acessar outras opções ele so fica na pagina de login
sabe porque?
Obrigado[/quote]
O seu parametro url-pattern do Faces Servlet no arquivo web.xml está utilizando qual formato?
Coloca aqui também a configuração da navegacão do loginEmpresa que está no arquivo faces-config.xml.
bom as pagina que podem ser vistas são a home… onde tem uma imagem explicando o sistema, a pagina de cadastro a pagina de login e a pagina de contato essas podem ser vistar sem autenticação…
Boa tarde, Rodrigo, alterei onde vc disse e ficou assim
private boolean requestingSecureView(FacesContext context) {
ExternalContext extContext = context.getExternalContext();
String path = extContext.getRequestPathInfo();
return (!"/loginEmpresa/loginEmpresa.jsf".equals(path) && !"/empresa/CadastroEmpresa.jsf".equals(path));
}
porem quando eu executo a aplicação ainda continua mostrando uma pagina em branco e não abre o meu home.jsf
o Paulo sugeriu que eu tirasse o context.responseComplete(); so que se eu faço isso ele me redireciona direto para a pagina de login e não me deixa sair dela… e o que eu quero é que quando abrir aplicação ele mostreu meu home.jsf e nele possa clicar no menu login.jsf e ai sim.
meu web.xml o welcome file é o index.jsp e nesse index tem um jsp:forward que leva para meu home.jsf sera que tem algo a ver?
nossa oq ue estou fazendo de errado sera? tudo que eu precisava era ser redirecionado para meu home e a partir dele acessar uma pagina de login e me logar rsrs
@author blueyou
*/
public class ListenerAutenticacao implements PhaseListener
{
private static final String USER_LOGIN_OUTCOME = “home”; //Indica a página para qual deve redirecionar
@Override
public void afterPhase(PhaseEvent event)
{
FacesContext context = FacesContext.getCurrentInstance();
if ((usuarioEmpresa(context)) || (usuarioAdministrador(context))) {
// allow processing of the requested view
return;
} else {
// send the user to the login view
if (requestingSecureView(context)) {
FacesContext faces = FacesContext.getCurrentInstance();
faces.getApplication().getNavigationHandler().handleNavigation(faces,
null,
USER_LOGIN_OUTCOME);
}
}
}
/**
Verifica se o usuario foi autenticado no contexto da sessao