Autorização com JSF

Olá pessoal do forum blz…

Sou novo com JSF e gostaria de saber como vcs controlam as autorizações dos usuários, ou seja,
como vc permitem ou não o acesso as páginas do sistema com JSF…???

Será q vcs teriam algum exemplo para seguir ???

Obrigado a todos.

Uma maneira bem simples seria com a utilização de filters.

Dê uma olhada nesse material:
http://www.devmedia.com.br/articles/viewcomp.asp?comp=5331

Criar um servlet é a maneira mais fácil disso:

public class LoginFilter implements Filter {
	
	/**
	 * Logger em questão
	 */
	private static final Logger logger = Logger.getLogger(LoginFilter.class);

	/**
	 * Identificador do Filtro
	 */
	private final static String FILTER_APPLIED = "_security_filter_applied";

	/**
	 * Construtor padrão
	 */
	public LoginFilter() {
	}

	/**
	 * Método implementado do Filter
	 */
	public void init(FilterConfig arg0) throws ServletException {
	}

	/**
	 * Método implementado do Filter
	 */
	public void destroy() {
	}

	/**
	 * Responsável por validar e verificar se o usuario está logado
	 */
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest hreq = (HttpServletRequest) request;
		HttpServletResponse hresp = (HttpServletResponse) response;
		HttpSession session = hreq.getSession();

		String paginaAtual = new String(hreq.getRequestURL());
		logger.info("Pagina em questao: " + paginaAtual);
		if ((request.getAttribute(FILTER_APPLIED) == null) && paginaAtual != null
				&& (!paginaAtual.endsWith("login.jsf") && !paginaAtual.endsWith("cadastroEmpresa.jsf") && !paginaAtual.endsWith("recuperarSenha.jsf") && !paginaAtual.endsWith("loginEnviadoEmail.jsf") && !paginaAtual.contains("_classes.xcss") && !paginaAtual.contains("/script") && !paginaAtual.endsWith("cadastroEfetuado.jsf"))
				&& (paginaAtual.endsWith(".jsf"))) {
			request.setAttribute(FILTER_APPLIED, Boolean.TRUE);

			String user = null;
			LoginBean login = null;
			OperadorBean operador = null;
			logger.info("Procurando usuario");
			if (((br.com.teste.jsf.bean.login.Login) session.getAttribute("login")) != null) {
				 login = ((br.com.teste.jsf.bean.login.Login)session.getAttribute("login")).getLoginBean();
				 operador = ((br.com.teste.jsf.bean.login.Login)session.getAttribute("login")).getOperadorBean();

			}
			logger.info("Usuario encontrado: " + user);

			if((operador.getUsuario() == null && operador.getSenha() == null || operador.getUsuario().equals("") && operador.getSenha().equals("")) && (login.getUsuario() == null && login.getSenha() == null  || login.getUsuario().equals("") && login.getSenha().equals(""))){
				if(paginaAtual.contains("administracao")){
					logger.info("Redirecionando para a página de login da Administracao");
					hresp.sendRedirect("/Teste/administracao/login/login.jsf");
				} else {				
					logger.info("Redirecionando para a página de login do Portal empresas");
					hresp.sendRedirect("/Teste/portal/login/login.jsf");
				}
				return;
			}
			
			if(login.getUsuario() != null && (login.getSenha() == null || login.getSenha().equals(""))){
				hresp.sendRedirect("/Teste/portal/login/login.jsf");
				return;
			}
		}
		
		chain.doFilter(request, response);
	}
}

web.xml

<filter>
		<filter-name>Login Filter</filter-name>
		<filter-class>br.com.teste.filtros.LoginFilter</filter-class>
	</filter>
<filter-mapping>
		<filter-name>Login Filter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>

Falow pessoal muito obrigado pelas dicas, vou tentar implementar aqui…

Obrigado mesmo !! :slight_smile:

Eu implementei isso num projeto que estou trabalhando e ficou ótimo.

Aprendi bastante usando Servlet Filter, dá uma pesquisada!

Abraço!

Procura por JAAS.

você pode abstrair bastante se usar o próprio JSF pra fazer isso através do PhaseListener