ESPECI ALI STA EM GESTO E DOCNCI A UNI VERSI TRI A JSF Controle de Acesso Antes de iniciarmos este assunto, importante conhecermos a definio de autenticao e autorizao. - Autenticao: deve verificar se um usurio ele mesmo atravs de validao de senhas e/ou certificados. - Autorizao: com base em um usurio identificado, as regras e controles de permisso e acesso sero aplicadas na aplicao/produto e seus recursos. JSF Controle de Acesso Ao desenvolvermos uma apliao em java para web, existem vrias maneiras de fazer com que o acesso a determinadas pginas s possa ser autorizado mediante um processo de login com sucesso. Entre elas esto: - Servlet Filter - Phase Listener - Java Authentication and Authorization Service (JAAS) - jGuard - Spring Security - Apache Shiro Filters Esta a forma mais bsica e rpida de implementar uma soluo deste tipo. O Filter permite a interceptao, manipulao e redirecionamento de todas as requisies HTTP do seu servidor, filtrando o endereo que est sendo acessado. Sendo assim, quando o usurio Joo acessar aquela URL que proibida, voc pode imediatamente redirecion-lo para outro endereo, antes que a resposta seja dada ao cliente. Phase Listener Para as aplicaes escritas em JavaServer Faces, alm da opo de usar servlets filters, estas podem se utilizar de um recurso especifico do JSF chamado da phase listener que responsvel por interceptar e oferecer mecanismos de manipulaes referentes as mudanas de eventos ocorridas no ciclo de vida da especificao. Relacionado ao contexto de autenticao e autorizao, ela se encaixa perfeitamente para a implementaes de controle de usurios, oferendo ao projetista da aplicao mais uma opo arquitetural. (Fernando Franzini) JavaAuthenticationandAuthorizationService O JAAS (Java Authentication and Authorization Service) a API padro do Java para controle de acesso e autorizao em aplicaes JavaEE. Com JAAS possvel autenticar e validar usurios e certificados, bem como controlar a possibilidade de acesso e/ou utilizao de recursos na aplicao (arquivos, diretrios, URLs, contedo, etc). jGuard jGuard uma biblioteca que fornece segurana EASY (autenticao e autorizao) para aplicaes web em Java. Ele construdo sobre a estrutura estvel e madura JAAS, que faz parte da API Java J2SE. jGuard muito flexvel e permite vrias maneiras diferentes para configurar esses mecanismos de autenticao e autorizao, ou seja, em um banco de dados relacional, arquivos XML ou servio LDAP. jGuard est sob a licena LGPL open source. Spring Security Spring Security uma estrutura que se concentra em fornecer autenticao e autorizao para aplicaes Java. Como todos os projetos Spring, o poder real do Spring Security encontrado em quo facilmente ele pode ser estendido para atender aos requisitos personalizados. Caractersticas: - Suporte abrangente e extensvel para autenticao e autorizao - Proteo contra ataques, como fixao de sesso, clickjacking, cross site request forgery, etc - Integrao API Servlet - Integrao opcional com Spring Web MVC - Muito mais ... Apache Shiro Apache Shiro um framework poderoso e fcil de usar que executa autenticao, autorizao, criptografia e gerenciamento de sesso. Com a API fcil de entender do Shiro, voc pode rapidamente e facilmente proteger qualquer aplicao - desde as menores aplicaes mveis at as maiores aplicaes web e corporativas. Utilizando o Phase Listener Crie uma nova classe dentro do pacote util chamada Autorizador e faa as importaes necessrias. import bean.LoginBean; public class Autorizador implements PhaseListener { @Override public void afterPhase(PhaseEvent event) { FacesContext facesContext = event.getFacesContext(); String currentPage = facesContext.getViewRoot().getViewId(); boolean isLoginPage = (currentPage.lastIndexOf("index.xhtml") > -1); HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true); LoginBean loginBean = (LoginBean) session.getAttribute("loginBean"); if (!isLoginPage && loginBean != null && !loginBean.isAutenticado()){ FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Acesso negado", null facesContext.addMessage("", message); NavigationHandler nh = facesContext.getApplication().getNavigationHandler(); nh.handleNavigation(facesContext, null, "/index.xhtml"); } } @Override public void beforePhase(PhaseEvent arg0) { } @Override public PhaseId getPhaseId() { return PhaseId.RESTORE_VIEW;} } Utilizando o Phase Listener Altere seu arquivo faces-config.xml e adicione as linhas a seguir antes da tag </faces-config>. <lifecycle> <phase-listener>util.Autorizador</phase-listener> </lifecycle> Referncias FRANZINI, Fernando. Autenticao e Autorizao. Disponvel em: http://fernandofranzini.wordpress.com/2009/09/09/autenticacao-e-autorizacao/ JEVEAUX, Paulo Csar M. Autenticao e Autorizao: JAAS com JDBC Realm. Disponvel em: http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/ jGuard. Disponvel em: http://jguard.xwiki.com/xwiki/bin/view/Main/WebHome LANHELLAS, Ronaldo. JSF Filter: Criando um sistema de login com criptografia MD5. Disponvel em: http://www.devmedia.com.br/jsf-filter-criando-um-sistema-de-login-com-criptografia- md5/29975#ixzz314wGJJn4 Spring Security. Disponvel em: http://projects.spring.io/spring-security/