Ajuda na parte do login do projecto

Bem tentei adptar o codigo que postaste no artigo que referenciaste acima no meu, mas na configuração dá erro e diz que não consegue encontrar o fully qualified name da classe. Abaixo deixo o codigo da classe e do arquivo faces-config.

package mz.com.SistemaArmazemFCSP.phaseListener;

import java.sql.SQLException;

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 mz.com.SistemaArmazemFCSP.DAO.UsuarioDAO;
import mz.com.SistemaArmazemFCSP.domain.Usuario;

public class AutorizacaoPhaseListener implements PhaseListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private UsuarioDAO udao = new UsuarioDAO();
	private Usuario usuario;
	private FacesContext facesContext;
	private NavigationHandler nh;

	public FacesContext getFacesContext() {
		return facesContext;
	}

	public void setFacesContext(FacesContext facesContext) {
		this.facesContext = facesContext;
	}

	public Usuario getUsuario() {
		return usuario;
	}

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

	public UsuarioDAO getUdao() {
		return udao;
	}

	public void setUdao(UsuarioDAO udao) {
		this.udao = udao;
	}

	public NavigationHandler getNh() {
		return nh;
	}

	public void setNh(NavigationHandler nh) {
		this.nh = nh;
	}

	@Override
	public void afterPhase(PhaseEvent event) {
		facesContext = event.getFacesContext();
		nh = facesContext.getApplication().getNavigationHandler();
		Usuario usuario = (Usuario) facesContext.getExternalContext().getSessionMap().get("usuario");

		String paginaActual = facesContext.getViewRoot().getViewId();

		if (paginaActual.contains("/pages/*")) {
			Usuario usuarioRetornado = null;
			try {
				usuarioRetornado = udao.buscarUsuario(usuario.getUsuario(), usuario.getSenha());
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (usuarioRetornado == null) {
				nh.handleNavigation(getFacesContext(), null, "index.xhtml?faces-redirect=true");

			} else if (usuarioRetornado.getRolestring().equalsIgnoreCase("Admin")) {

				nh.handleNavigation(getFacesContext(), null, "indexAdmin.xhtml?faces-redirect=true");

			} else if (usuarioRetornado.getRolestring().equalsIgnoreCase("Administrador")) {
				nh.handleNavigation(getFacesContext(), null, "indexAdministrador.xhtml?faces-redirect=true");

			} else if (usuarioRetornado.getRolestring().equalsIgnoreCase("Funcionario")) {
				nh.handleNavigation(getFacesContext(), null, "indexFuncionario.xhtml?faces-redirect=true");
			}

		} if (paginaActual.contains("/pages/index.xhtml?faces-redirect=true")) {
			Usuario usuarioRetornado = null;
			try {
				usuarioRetornado = udao.buscarUsuario(usuario.getUsuario(), usuario.getSenha());
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (usuarioRetornado == null) {

				nh.handleNavigation(getFacesContext(), null, "/pages/index.xhtml?faces-redirect=true");
			}
		}

	}

	@Override
	public void beforePhase(PhaseEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public PhaseId getPhaseId() {
		// TODO Auto-generated method stub
		return null;
	}

}

arquivo faces-config

<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
	version="2.2">


	<lifecycle>
		<phase-listener>mz.com.SistemaArmazemFCSP.phaseListener.AutorizacaoPhaseListener</phase-listener>
	</lifecycle>


</faces-config>

O erro da configuração acabou por sair ao salvar. Mas não resultou, tem algo de mal no codigo?

:clap:t2:

if (paginaActual.contains("/pages/*")) {

Esse asterisco não vai funcionar da maneira que vc quer, pois na url nao vai estar o asterisco la

qual seria o endereço para puder englobar todas as paginas do projecto? A intenção seria aplicar em todas as paginas que o usuario apenas acessa ao fazer o login

Todas todas? Ai nem precisa de if, mas pode ser contains("")

Se você quer todas as páginas admin, você faz:

if (paginaActual.contains("/admin/"))

Se você quer todas as páginas admin que estão dentro da pasta ‘empresa2’, você faz:

if (paginaActual.contains("/empresa2/admin/"))

O método contains vai verificar se a String possui aquele conteúdo, no caso vai verificar se a url possuí aquele conteúdo.

Tenho certeza que na sua url não vem escrito faces-redirect=true

Então deixa apenas “/pages/index.xhtml”

Se você estiver com dúvida em relação a url, printa no console que ajuda bastante

System.out.println(paginaActual);

Não sei se entendi bem, mas, as minhas paginas estão dentro de uma pasta que é "pages", então terei que criar uma outra pasta dentro da pasta "pages" que é a pasta "admin" e introduzir la todas as paginas que quero fazer controlo de acesso ou criar uma pasta para cada nivel de acesso de usuario e colocar as paginas que o usuario terá acesso.

Exato!

Ex:
/pages/admin/relatorio.xhtml
/pages/admin/configuracoes.xhtml