Construindo enterprise beans seguros no Java EE 5
O suporte para a especificação Java EE 5 no NetBeans IDE permite que você tire vantagem dos muitos recursos do Java EE 5, simplificando o desenvolvimento de aplicações. Um desenvolvimento significativo na especificação Java EE 5 foi a incorporação de anotações. Usar anotações permite que você elimine muito do código básico usado ao codificar aplicativos e minimiza a quantidade de configuração necessária ao implantar seu aplicativo.
Uma área que se tornou muito simplificada por meio do uso de anotações é o desenvolvimento e a configuração de enterprise beans. As anotações permitem que você especifique muitas propriedades de configuração que foram especificadas em arquivos do descritor de deployment, tornando muitos dos arquivos do descritor de deployment desnecessário. Embora as aplicações ainda requeiram alguns arquivos do descritor de deployment (tal como web.xml), o editor do descritor de deployment de visualização múltipla do IDE torna muito mais fácil a edição dos arquivos.
Usando anotações, criar enterprise beans seguros é muito mais fácil. Em vez de configurar a segurança do enterprise bean no descritor de deployment ejb-jar.xml, você pode usar anotações de segurança para configurar a autorização diretamente no código-fonte. Aplicações empresariais Java EE 5 não requerem ejb-jar.xml ou application.xml.
Para uma visão geral de alguns dos recursos da especificação Java EE 5, consulte Introdução à tecnologia Java EE 5. Para obter mais informações sobre as especificações de anotação, consulte JSR 250: Anotações comuns da Plataforma Java.
Este documento usa a versão NetBeans IDE 6.1. As etapas destacadas neste documento também podem ser aplicadas, se você estiver usando a versão 6.0 do IDE, mas existem algumas opções disponíveis no NetBeans IDE 6.1 que não estão disponíveis em versões anteriores.
Duração esperada: 30 minutos
Exercícios do tutorial
Para seguir este tutorial, você precisa dos seguintes recursos e softwares.
| NetBeans IDE |
Web e Java EE, versão 6.1 ou
versão 6.0 |
| Java Development Kit (JDK) |
versão 6 ou
versão 5 |
| Servidor da aplicação GlassFish |
V2 |
Para este tutorial, é necessário registrar uma instância local do servidor da aplicação GlassFish/Sun Java System com o IDE. Se você instalou uma versão "completa" ou "Web e Java EE" do IDE, o servidor da aplicação já deve estar instalado e registrado. Se o servidor da aplicação não estiver registrado no IDE, escolha Ferramentas > Servidores para registrar o servidor no gerenciador de servidores. Não é possível implantar aplicações empresariais no servidor Web Tomcat.
Pré-requisitos
Este tutorial pressupõe que você tenha algum conhecimento básico das tecnologias a seguir, ou alguma experiência de programação com elas:
- Programação em Java
- NetBeans IDE
Criando um grupo de segurança no servidor da aplicação
Em nosso exemplo, só queremos que os usuários do grupo bank_users acessem nosso enterprise bean. Criaremos o usuário manager no grupo bank_users no território de segurança file no servidor da aplicação.
- Inicie o servidor da aplicação, clicando com o botão direito do mouse em seu nó na janela Serviços e escolhendo Iniciar.
- Clique com o botão direito do mouse no nó do servidor da aplicação e escolha Exibir console de administração. Faça logon no console de administração e selecione Configuração > Segurança > Territórios > arquivo na barra de navegação esquerda.
- Clique no botão Gerenciar usuários no quadro central do console de administração. Em Usuários atuais, clique no botão Novo.
- Digite manager para o ID do usuário, password para a Senha e bank_users para a Lista de grupos. Depois clique em OK.
Criando a aplicação empresarial
Nossa aplicação empresarial consistirá em um bean de sessão simples e um cliente de aplicação que tenta acessá-la.
Criando o projeto de aplicação empresarial
- Escolha Arquivo > Novo projeto (Ctrl-Shift-N) e selecione o modelo Aplicação empresarial na categoria Empresa. Clique em Próximo.
- Chame o projeto de Secure e defina a localização do projeto.
- Desmarque a opção Usar pasta dedicada, se ela estiver selecionada.
(Esta opção fica disponível se você estiver usando o NetBeans IDE 6.1. Para este tutorial, não há motivo para copiar as bibliotecas do projeto para uma pasta dedicada porque você não precisará compartilhar bibliotecas com outros usuários ou projetos.)
Clique em Próximo.
- Defina o servidor como GlassFish e defina a versão de Java EE Java EE 5.
- Selecione Criar módulo EJB e Criar módulo de cliente da aplicação e desmarque Criar módulo da Web. Clique em Terminar.
Protegendo um método em um bean de sessão
Nosso bean de sessão não faz nada demais. Ele apenas retorna um saldo total de amostra. Criaremos um método getStatus e protegeremos o bean do método, anotando-o com a anotação @RolesAllowed e especificaremos as funções de segurança permitida para acessar o método. Essa função de segurança é usada pela aplicação e não é a mesma que os usuários e grupos no servidor. Mapearemos a função de segurança para os usuários e grupos mais tarde quando configurarmos os descritores de deployment.
As anotações de segurança podem ser aplicadas individualmente a cada método em uma classe ou a uma classe inteira. Neste exercício simples, usaremos a @RolesAllowed para anotar um método, mas a especificação Java EE 5 define outras anotações de segurança que podem ser usadas nos enterprise beans.
- Na janela Projetos, clique com o botão direito do mouse no nó do módulo EJB (Secure-ejb) e escolha Novo > Bean de sessão.
- Chame o bean de AccountStatus, chame o pacote de bean e defina o bean para ter uma interface remota. Clique em Terminar.
Quando você clica em Terminar, o IDE cria AccountStatusBean e abre o arquivo no editor de código-fonte. O IDE também cria a interface remota AccountStatusRemote para o bean.
- No editor de código-fonte, adicione a declaração de campo seguinte (em negrito) a AccountStatusBean:
public class AccountStatusBean implements AccountStatusRemote {
private String amount = "250";
- No editor de código-fonte, clique com o botão direito do mouse em qualquer lugar dentro de AccountStatusBean e escolha Métodos EJB > Adicionar método comercial. Chame o método de getStatus, defina o tipo de retorno para String. O IDE expõe automaticamente o método comercial na interface remota.
- No editor de código-fonte, adicione a linha seguinte em negrito ao método getStatus:
public String getStatus() {
return "The account contains $" + amount;
}
- Digite o seguinte (em negrito) para anotar o método getStatus:
@RolesAllowed({"USERS"})
public String getStatus() {
Essa anotação significa que somente os usuários na função de segurança USERS podem acessar o método getStatus.
- Corrija as instruções de importação e salve suas alterações. Certifique-se de que javax.annotation.security.RolesAllowed é adicionado ao arquivo.
Acessando o bean de sessão com um cliente de aplicativo
Nossa aplicação precisa ter somente um método simples que acessará o bean de sessão. Chamaremos o enterprise bean usando a anotação @EJB.
- Na janela Projetos, expanda Secure-app-client > Pacotes de códigos-fonte > secure e clique duas vezes em Main.java para abrir o arquivo no editor de código-fonte.
- Clique com o botão direito do mouse no editor de código-fonte e escolha Recursos empresariais > Chamar enterprise bean.
- Na caixa de diálogo Chamar enterprise bean, expanda o nó Secure-ejb e selecione AccountStatusBean. Clique em OK.
O IDE adiciona o seguinte ao cliente da aplicação para procurar o bean de sessão:
@EJB
private static AccountStatusRemote accountStatusBean;
- Modifique o método main para adicionar o seguinte e salvar suas alterações:
public static void main(String[] args) {
System.out.println(accountStatusBean.getStatus());
Configurando os descritores de deployment
Em Java EE 5, as aplicações empresariais geralmente não requerem arquivos do descritor de deployment, tal como ejb-jar.xml. Se você expandir o nó Arquivos de configuração sob Secure-ejb ou a aplicação empresarial Secure, é possível ver que não há descritores de deployment. Podemos usar anotações para especificar muitas das propriedades que foram configuradas no ejb-jar.xml. Neste exemplo, especificamos as funções de segurança dos nossos métodos EJB usando a anotação @RolesAllowed em nosso bean de sessão.
Entretanto, ao configurar a segurança de uma aplicação, ainda temos que especificar algumas propriedades nos descritores de deployment. Em nosso exemplo, precisamos mapear as funções de segurança na aplicação empresarial(USERS) para os usuários e grupos que configuramos no servidor da aplicação. Criamos o grupo bank_users no servidor da aplicação, e agora precisamos mapear esse grupo para a função de segurança USERS em nossa aplicação empresarial. Para fazer isso, editaremos o descritor de deployment sun-application.xml da nossa aplicação empresarial.
Como a aplicação empresarial não precisa de descritores de deployment para ser executada, o IDE não criou os descritores de deployment por padrão. Portanto, primeiro precisamos criar o descritor de deployment e configurá-la.
- Escolha Arquivo > Novo arquivo no menu principal para abrir o assistente para Novo arquivo. Como alternativa, você pode abrir o assistente para Novo arquivo, clicando com o botão direito do mouse no projeto de aplicação empresarial Secure na janela Projetos e escolhendo Novo > Outro no menu pop-up.
- No painel Categorias do assistente para Novo arquivo, selecione GlassFish e o tipo de arquivo Descritor de deployment do GlassFish. Clique em Próximo e clique em Terminar no próximo painel.
Quando você clica em Terminar, o IDE cria sun-application.xml e abre o arquivo no editor do descritor de deployment de visualização múltipla. Você usará a aba de segurança do editor de visualização múltipla para configurar os mapeamentos de função de segurança.
- Na aba Segurança, clique em Adicionar mapeamento de função de segurança e digite USERS para o Nome da função de segurança.
- Clique em Adicionar grupo, digite bank_users para o Nome do grupo e clique em OK.
- Salve as alterações.
Você pode clicar na aba XML no editor de visualização múltipla para visualizar o arquivo do descritor de deployment na visualização XML. Você pode ver que o arquivo do descritor de deployment agora contém o seguinte:
<sun-application>
<security-role-mapping>
<role-name>USERS</role-name>
<group-name>bank_users</group-name>
</security-role-mapping>
</sun-application>
Executando a aplicação
Nossa aplicação agora está pronta. Quando executarmos o projeto, seremos solicitados a fornecer um nome de usuário e senha para um usuário no grupo bank_users.
- Clique com o botão direito do mouse no nó do projeto Secure e escolha Executar projeto. O IDE constrói o arquivo EAR, inicia o servidor da aplicação (se ainda não estiver em execução) e implanta o arquivo EAR no servidor da aplicação. Aparece uma caixa de diálogo solicitando um nome de usuário e senha.

- Indique o nome de usuário (manager) e a senha (password) na caixa de diálogo e clique em OK. A mensagem seguinte é exibida na janela Saída:
A conta contém 250$
Este exemplo muito simples demonstra como proteger um método em um enterprise bean usando anotações Java.
Veja também
Para obter mais informações sobre o uso de anotações para proteger enterprise beans, consulte os seguintes recursos:
Para obter mais informações sobre o uso do NetBeans IDE para desenvolver aplicações Java EE, consulte os seguintes recursos:
Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos dos recursos de desenvolvimento do Java EE do NetBeans IDE, inscreva-se na lista de endereçamento de nbj2ee.