JSFF - Co JS Con ntr trol olee de de Aces Acesso so FERNANDO FERN ANDO FREIT F REITAS AS COSTA ESPECIALISTA EM GESTÃO E DOCÊNCIA UNIVERSITÁRIA
JSF – Controle de Acesso Antes de iniciarmos este assunto, é importante conhecermos a definição de autenticação e autorização.
- Autenticação: deve verificar se um usuário é ele mesmo através de validação de senhas e/ou certificados. - Autorização: com base em um usuário identificado, as regras e controles de permissão e acesso serão aplicadas na aplicação/produto e seus recursos.
JSF – Controle de Acesso Ao desenvolvermos uma apliação em java para web, existem várias maneiras de fazer com que o acesso a determinadas páginas só possa ser autorizado mediante um processo de login com sucesso. Entre elas estão: - Servlet Filter - Phase Listener - Java Authentication and Authorization Service (JAAS) - jGuard - Spring Security - Apache Shiro
Filters Esta é a forma mais básica e rápida de implementar uma solução deste tipo. O Filter permite a interceptação, manipulação e redirecionamento de todas as requisições HTTP do seu servidor, filtrando o endereço que está sendo acessado. Sendo a ssim, quando o usuário João acessar aquela URL que é proibida, você pode imediatamente redirecioná-lo para outro endereço, antes que a resposta seja dada ao cliente.
Phase Listener Para as aplicações escritas em JavaServer Faces , além da opção de usar servlets filters, estas podem se utilizar de um recurso especifico do JSF chamado da phase listener que é responsável por interceptar e oferecer mecanismos de manipulações referentes as mudanças de eventos ocorridas no ciclo de vida da especificação. Relacionado ao contexto de autenticação e autorização, ela se encaixa perfeitamente para a implementações de controle de usuários, oferendo ao projetista da aplicação mais uma opção arquitetural. “
”
(Fernando Franzini)
JavaAuthenticationandAuthorizationService “O JAAS (Java Authentication and Authorization Service) é a API padrão do Java para controle de acesso e autorização em aplicações JavaEE. Com JAAS é possível autenticar e validar usuários e certificados, bem como controlar a possibilidade de acesso e/ou utilização de recursos na aplicação (arquivos, diretórios, URLs, conteúdo, etc ).”
jGuard jGuard é uma biblioteca que fornece segurança EASY (autenticação e autorização) para aplicações web em Java. Ele é construído sobre a estrutura estável e madura JAAS, que faz parte da API Java J2SE. jGuard é muito flexível e permite várias maneiras diferentes para configurar esses mecanismos de autenticação e autorização, ou seja, em um banco de dados relacional, arquivos XML ou serviço LDAP. jGuard está sob a licença LGPL open source.
Spring Security Spring Security é uma estrutura que se concentra em fornecer autenticação e autorização para aplicações Java. Como todos os projetos Spring, o poder real do Spring Security é encontrado em quão facilmente ele pode ser estendido para atender aos requisitos personalizados. Características: - Suporte abrangente e extensível para autenticação e autorização - Proteção contra ataques, como fixação de sessão, clickjacking, cross site request forgery, etc - Integração API Servlet - Integração opcional com Spring Web MVC - Muito mais ...
Apache Shiro Apache Shiro é um framework poderoso e fácil de usar que executa autenticação, autorização, criptografia e gerenciamento de sessão. Com a API fácil de entender do Shiro, você pode rapidamente e facilmente proteger qualquer aplicação - desde as menores aplicações móveis até as maiores aplicações web e corporativas.
Utilizando o Phase Listener Crie uma nova classe dentro do pacote util chamada Autorizador e faça as importações necessárias.
import bean.LoginBean; public class Autorizador implements PhaseListener { @Override public void afterPhase(PhaseEventevent) { 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", n 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 .
util.Autorizador
Referências FRANZINI, Fernando. Autenticação e Autorização. Disponível em: http://fernandofranzini.wordpress.com/2009/09/09/autenticacao-e-autorizacao/ JEVEAUX, Paulo César M. Autenticação e Autorização: JAAS com JDBC Realm . Disponível em: http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-com-jdbc-realm/
jGuard. Disponível em: http:// jguard.xwiki.com/xwiki/bin/view/Main/WebHome LANHELLAS, Ronaldo. JSF Filter: Criando um sistema de login com criptografia MD5. Disponível em: http://www.devmedia.com.b r/jsf-filter-criando-um-sistema-de-login-com-criptografiamd5/29975#ixzz314wGJJn4
Spring Security. Disponível em: http://projects.spring.io/spring-security/