Atenção: esse artigo tem três vídeos complementar.
Clique e assista o primeiro!
Clique e assista o segundo!
Clique e assista o terceiro!
Artigo no estilo: Curso
De novidades da plataforma Java EE (Enterprise Edition), versão 6.0, lançada em dezembro de 2009, como padrão para desenvolvimento de aplicações corporativas (enterprise) em Java. A plataforma reúne diversos padrões, como JPA, EJB, Servlets, etc., que auxiliam o desenvolvedor, provendo uma série de serviços de infraestrutura. Esta é a terceira e última parte de uma série de artigos sobre o tema, portanto sugere-se a leitura dos dois primeiros artigos da série nas duas últimas edições da Java Magazine.
Para que serve:
Java EE serve para o desenvolvimento de aplicações de médio e grande porte que possuam requisitos de aplicações corporativas, como escalabilidade, distribuição, segurança, etc. Java EE 6 traz novidades em relação às versões anteriores, simplificando ainda mais o desenvolvimento, além de trazer maior flexibilidade e extensibilidade à plataforma. De sistemas Web simples a aplicações com N camadas com Web Services e evocação remota de métodos, vários tipos de sistema podem ser beneficiados pelo uso da plataforma Java EE 6 como base.
Em que situação o tema é útil:
Quando buscamos produtividade em um time de desenvolvedores que precisa construir uma aplicação com características corporativas, pois os serviços já implementados na plataforma Java EE 6 eximem o programador da tarefa de desenvolvê-los. Ser o padrão Java para desenvolvimento enterprise também traz vantagens, pois empresas tendem a preferir a utilização de padrões. O artigo foca nas novidades da versão 6 de Java EE, porém utilizando uma abordagem prática que apresente todos os detalhes necessários ao desenvolvimento dos exemplos. Desenvolvedores com experiência em versões anteriores da plataforma poderão atualizar-se com as novidades, enquanto aqueles para os quais Java EE é novidade verão como desenvolver uma aplicação desde seu início (considerando os primeiros dois artigos desta série).
Java EE 6 na Prática – Parte 3:
Continuamos a apresentar as novidades da plataforma Java EE 6, aplicando-a na prática e construindo uma pequena aplicação corporativa de exemplo. Nas primeiras partes desta série, apresentamos a plataforma Java EE e diversas tecnologias como JPA 2.0, CDI, Bean Validation, Facelets e suporte a AJAX no JSF 2.0. Neste artigo, continuamos o desenvolvimento do nosso sistema de exemplo, o SisContrAm, mostrando novas funcionalidades. Apresentamos autenticação e autorização em Java EE 6 com JAAS, primeiramente adaptando o banco de dados para o esquema de grupos de usuários (Listagem 1) e conversão de senhas com MD5 (Listagem 2) para, em seguida, configurar os papéis (Listagem 3). Mostramos, então, a autenticação via formulário (Listagens 4 a 8) e também de forma programática (Listagens 9 e 10) e como proteger classes e páginas com anotações de autorização JAAS (Listagens 11 e 12, Figura 1). Passamos, então, a falar de Servlets 3.0, apresentando anotações de mapeamento de Servlets (Listagem 13 a 15, Figura 2) e a configuração da aplicação via fragmentos Web (Listagem 16). No próximo assunto, novidades JPQL, mostramos o suporte a expressões CASE (Listagem 17) e alguns novos operadores (Listagens 18 e 19). Finalizamos com os melhoramentos à tecnologia EJB, mostrando EJBs sem interface (Listagens 20 a 22), EJBs Singleton (Listagem 23) e evocação assíncrona de métodos em EJBs (Listagens 24 a 26, Figura 3).
Esta é a terceira e última parte de uma série de artigos sobre a plataforma Java Enterprise Edition, versão 6. Na primeira parte, publicada na Edição 80 da Java Magazine, apresentamos a plataforma e suas novidades de maneira geral e começamos o desenvolvimento do SisContrAm, um sistema de controle de ambulâncias, desenvolvido com Java EE 6. Usando este sistema como exemplo, mostramos novas funcionalidades da plataforma: JPA 2.0, Bean Validation e o CDI, Contexts and Dependency Injection. Na segunda parte, publicada na Edição 81, falamos sobre Facelets, a API de Critérios, gerenciamento de conversações e suporte a AJAX.
Nesta edição, utilizando sempre o SisContrAm como exemplo, mostraremos mais novidades do Java EE 6:
· JAAS: a API Java Authentication and Authorization Service faz parte do núcleo do Java SE (Standard Edition) e é a tecnologia base para implementação de segurança em aplicações Java EE 6. Veremos como registrar usuários e grupos no domínio de segurança do servidor de aplicação, autenticar usuários via formulário ou programaticamente e como proteger classes e páginas de acesso não autorizado;
· Servlets 3.0: Java EE 6 inclui a especificação mais recente da API Servlets, a versão 3.0, que traz diversas novidades, dentre as quais anotações e fragmentos Web, que explicaremos em mais detalhes neste artigo;
· Novos comandos da JPQL: a Java Persistence Query Language, linguagem de consultas utilizada para recuperar ou alterar dados referentes a objetos Java armazenados em bancos de dados relacionais, recebeu novos comandos na versão 2.0 da Java Persistence API (JPA). Mostraremos exemplos de uso destes novos comandos e discutiremos também o suporte ao travamento pessimista, outra novidade da JPA 2.0;
· Melhoramentos EJB: a cada nova versão de Java EE, desenvolver com EJBs fica mais simples, facilitando a tarefa do desenvolvedor de utilizar a infraestrutura provida pelo container. Na versão 6 da plataforma, facilidades como EJBs sem interface, EJBs Singleton e métodos assíncronos foram adicionadas e serão mostradas neste artigo.
Mostraremos tudo isso melhorando as funcionalidades de login e registro de chamadas do SisContrAm, além de adicionar duas pequenas novidades ao sistema: um contador de requisições e um EJB de propriedades globais da aplicação. Para um melhor aproveitamento dos exemplos, é recomendável que o leitor tenha lido as duas primeiras partes desta série de artigos, preferencialmente experimentando os exemplos ali trazidos. Se não é o caso, o código-fonte do SisContrAm ao final do segundo artigo pode ser obtido no site da Java Magazine e utilizado como base para os exemplos deste artigo.
Autenticação e autorização com JAAS
Na segunda parte desta série de artigos desenvolvemos a funcionalidade de login do SisContrAm. O login é uma forma de implementar autenticação, que é o ato de reconhecer a pessoa que está utilizando o sistema como um usuário registrado e que tem direito a acessar suas funcionalidades. Autenticação é garantir que o usuário é realmente quem ele diz ser.
No entanto, autenticação sozinha não basta, é preciso também implementar autorização. Autorização, ou controle de acesso, consiste em determinar quais funções e informações do sistema o usuário, que já foi autenticado, está autorizado a acessar. Pode parecer que implementamos ambos no SisContrAm, pois se um funcionário for cadastrado como operador e fizer o login, somente a opção “Chamada de Emergência” será mostrada a ele. No entanto, se este funcionário digitar a URL http://localhost:8080/SisContrAm-war/faces/cadastrarAmbulancia/lista.xhtml em seu navegador, poderá usar sem restrições o cadastro de ambulâncias, que deveria ser restrito a administradores.
Podemos implementar a autorização no SisContrAm de várias formas, no entanto, a plataforma Java EE 6 inclui como parte do seu conjunto de tecnologias o JAAS – Java Authentication and Authorization Service, ou Serviço de Autenticação e Autorização de Java. O JAAS é uma das APIs centrais do Java SE e é a base dos mecanismos de segurança do Java EE que, além de autenticação e autorização, visam prover integridade de dados, confidencialidade, não repudiaçãoe auditoria.
Vamos, então, reimplementar o login utilizando os mecanismos de autenticação do Java EE, inicialmente utilizando o método de formulário e em seguida como seria a autenticação programática. Com o usuário autenticado, protegeremos as funcionalidades do SisContrAm contra acesso não autorizado utilizando anotações do JAAS, novidades no Java EE 6.
Registrando o domínio de segurança no GlassFish
O JAAS trabalha com os seguintes conceitos básicos para autenticação e autorização:
· Domínio de segurança (realm): um conjunto de configurações de segurança registrado no servidor de aplicação sob um determinado nome. Uma aplicação corporativa indica ao servidor qual é o seu domínio de segurança utilizando este nome. Usuários e grupos são definidos dentro do domínio de segurança;
· Usuário (user): um indivíduo (ou software) identificado por um nome de usuário e uma senha dentro do domínio de segurança;
· Grupo (group): um grupo de usuários. Usuários podem pertencer a grupos para que papéis possam ser associados a grupos inteiros e não a cada usuário individualmente, o que consumiria mais tempo e aumentaria o tamanho dos arquivos de configuração;
· Papel (role): um nome associado a um conjunto de permissões de acesso. Autorização é feita indicando quais papéis podem acessar determinados recursos e atribuindo tais papéis a determinados grupos ou usuários.
Nosso primeiro passo, portanto, é configurar um domínio de segurança para o SisContrAm em nosso servidor de aplicação, o GlassFish. Para isso, abra a aba Services do NetBeans, localize o servidor GlassFish dentro do item Servers, clique nele com o botão direito do mouse e clique no item View Admin Console. Aguarde alguns instantes e o painel de administração do GlassFish se abrirá em seu navegador padrão.
...