Protegendo uma aplicação Web no NetBeans IDE
Contribuição de Dan Kolar, manutenção de James Branam e Jeff Rubinoff
Este documento lhe orienta a respeito dos fundamentos da adição de segurança a uma aplicação Web que é implantada no servidor GlassFish.
Este documento lhe mostra como configurar a autenticação de segurança usando uma janela de logon básica e usando também um formulário de logon em uma página da Web. Este documento guia você pelas etapas de criação de usuários no servidor Tomcat e no servidor GlassFish. Depois de criar os usuários, você cria as funções de segurança, definindo as propriedades de segurança no descritor de deployment. Este documento também mostra como usar a autenticação JDBC para proteger seu aplicativo durante a implantação no servidor GlassFish.
Duração esperada: 40 minutos
Conteúdo
Para seguir este tutorial, você precisa dos seguintes recursos e softwares.
| NetBeans IDE |
Versão do Java EE |
| Java Developer Kit (JDK) |
Versão 6 ou versão 7 |
| Plataforma Java EE |
Java EE 5 ou 6
|
| Banco de dados Viagem |
Não é obrigatório |
| Servidor de aplicativos ou Web compatível com Java EE |
Servidor Web Tomcat 7.x e/ou
GlassFish Server Open Source Edition 3.3.1
|
Instalando e configurando o ambiente de trabalho
Instale e inicie o NetBeans IDE. É possível instalar e iniciar o NetBeans IDE usando o servidor Tomcat incluído ou o servidor GlassFish.
Certifique-se de que o servidor esteja instalado e de que uma instância do servidor esteja registrada no IDE. Você pode usar o Gerenciador de servidores para registrar a instância instalada do servidor. (Escolha Ferramentas > Servidores > Adicionar servidor. Selecione "Servidor GlassFish <número da versão>" ou "Tomcat <número da versão>" e clique em Próximo. Clique em Explorar e localize o diretório de instalação do servidor de aplicações. Clique em Terminar.)
Criando a aplicação Web
Neste exercício, você primeiro cria o projeto de aplicação Web e a estrutura de diretório. Em seguida, você cria alguns arquivos html simples em cada um dos diretórios seguros. A aplicação Web usa uma autenticação de logon básica para acessar os diretórios seguros. Se quiser usar um formulário de logon para autenticação, você pode adicionar uma página jsp com o formulário.
Criando os diretórios seguros
- Escolha Arquivo > Novo projeto (Ctrl-Shift-N), selecione Aplicação Java Web na categoria Web e clique em Próximo.
- Chame o projeto de WebApplicationSecurity. Aceite as configurações padrão.
- (Opcional) Selecione a caixa de verificação Usar pasta dedicada para armazenamento de bibliotecas e especifique o local da pasta de bibliotecas. Consulte Compartilhando bibliotecas do projeto para obter mais informações sobre esta opção.
- Clique em Próximo.
- Selecione o servidor no qual deseja implantar o aplicativo. Somente os servidores registrados com o IDE estão listados. Clique em Próximo.
- Você não precisa adicionar um framework, portanto, clique em Terminar.
- Se tiver criado um aplicativo EE 6, vá à janela Projetos do IDE, clique com o botão direito do mouse no nó do projeto e selecione Novo > Outro > Web > Descritor de deployment padrão (web.xml). Aceite todos os padrões e clique através do assistente.
Nota: este tutorial mostra como configurar a segurança no descritor de deployment, mas, por padrão, os aplicativos EE 6 utilizam anotações em vez de um descritor de deployment.
- Na janela Projetos do IDE, clique com o botão direito do mouse em Páginas da Web e escolha Novo > Outro.
- No assistente para Novo arquivo, selecione Outro como a Categoria e Pasta como o Tipo de arquivo. Clique em Próximo.
-
No assistente para Nova pasta, chame a pasta de secureAdmin e clique em Terminar.
A pasta secureAdmin aparece na janela Projetos na pasta Páginas da Web.
- Repita as três etapas anteriores para criar outra pasta chamada secureUser.
- Crie um novo arquivo html na pasta secureUser, clicando com o botão direito do mouse na janela Projetos e escolhendo Novo > HTML.
- Chame o novo arquivo de pageU e clique em Terminar.
Quando você clica em Terminar, o arquivo pageU.html é aberto no Editor de código-fonte.
- No Editor de código-fonte, substitua o código existente em pageU.html pelo seguinte código.
<html>
<head>
<title>User secure area</title>
</head>
<body>
<h1>User Secure Area</h1>
</body>
</html>
- Clique com o botão direito do mouse na pasta secureAdmin e crie um novo arquivo html chamado pageA.
- No Editor de código-fonte, substitua o código existente em pageA.html pelo seguinte código.
<html>
<head>
<title>Admin secure area</title>
</head>
<body>
<h1>Admin secure area</h1>
</body>
</html>
Criando a página de índice JSP
Agora você cria a página de índice JSP contendo links para as áreas seguras. Quando o usuário clica no link, ele é solicitado a fornecer o nome de usuário e a senha. Se você usa um logon básico, eles são solicitados pela janela de logon do navegador padrão. Se você usa uma página de formulário de logon, o usuário indica o nome de usuário e a senha em um formulário.
- Abra index.jsp no Editor de código-fonte e adicione os seguintes links a pageA.html e pageU.html:
<p>Request a secure Admin page <a href="secureAdmin/pageA.html">here!</a></p>
<p>Request a secure User page <a href="secureUser/pageU.html" >here!</a></p>
- Salve as alterações.
Criando um formulário de logon (necessário para o Tomcat, opcional para o servidor GlassFish)
Se você quiser usar um formulário de logon em vez do logon básico, crie uma página jsp contendo o formulário. Em seguida, especifique o logon e as páginas de erro ao configurar o método de logon.
Importante: os usuários do Tomcat devem criar um formulário de logon.
- Na janela Projetos, clique com o botão direito do mouse na pasta Páginas da Web e escolha Novo > JSP.
- Chame o arquivo de login, deixe os outros campos com seu valor padrão e clique em Terminar.
- No Editor de código-fonte, insira o código seguinte entre as marcas <body> de login.jsp.
<form action="j_security_check" method="POST">
Username:<input type="text" name="j_username"><br>
Password:<input type="password" name="j_password">
<input type="submit" value="Login">
</form>
- Crie um novo arquivo html chamado loginError.html na página Páginas da Web. Trata-se de uma página de erro simples.
- No Editor de código-fonte, substitua o código existente em loginError.html pelo seguinte código.
<html>
<head>
<title>Login Test: Error logging in</title>
</head>
<body>
<h1>Error Logging In</h1>
<br/>
</body>
</html>
Criando usuários no servidor de destino
Para poder usar a segurança da autenticação de usuário/senha (logon básico ou logon baseado em formulário) em aplicações Web, os usuários e suas funções apropriadas têm que ser definidos para o servidor de destino. Para fazer logon em um servidor, a conta do usuário precisa existir nesse servidor.
A forma em que você define os usuários e as funções varia de acordo com o servidor de destino especificado. Neste tutorial, os usuários admin e user são usados para testar a configuração da segurança. Você precisa confirmar que esses usuários existem nos respectivos servidores, e que as funções apropriadas estejam atribuídas aos usuários.
Definindo usuários no servidor GlassFish
Neste caso, é necessário primeiro utilizar o console de administração do servidor GlassFish para criar dois novos usuários denominados user e admin. O usuário chamado user terá acesso limitado ao aplicativo, enquanto que admin terá privilégios de administração. A seguir, é necessário mapear estes usuários para a funções, modificando glassfish-web.xml. O arquivo glassfish-web.xml localiza-se no diretório Arquivos de configuração do seu projeto.
Nota: se estiver utilizando uma versão do servidor GlassFish anterior à 3.1, o arquivo de configuração se chamará sun-web.xml.
-
Abra o console de administração na janela Serviços do IDE clicando com o botão direito do mouse em Servidores > Servidor GlassFish > Exibir console de administração. A página de logon do servidor GlassFish se abre na janela do seu navegador. Você precisa fazer logon usando o nome de usuário e senha admin para acessar o Admin Console.
Observação: O servidor de aplicações deve estar em execução para você poder acessar o Admin Console. Para iniciar o servidor, clique com o botão direito do mouse no nó do servidor GlassFish e escolha Iniciar.
- No console de administração, vá à Configuração > server-config > Segurança > Territórios > Arquivo. O painel Editar território se abre.

- Clique no botão Gerenciar usuários na parte superior do painel Editar território. O painel Usuários do arquivo se abre.
- Clique em Novo. O painel Novo usuário de território de arquivo se abre. Digite user como o ID de usuário e userpw como a senha. Clique em OK.
- Siga as etapas anteriores para criar um usuário chamado admin com a senha adminpw no território arquivo.
Definindo funções e usuários no servidor Web Tomcat
No Tomcat 7, você cria um usuário com a função de gerenciador de script e uma senha para tal usuário ao registrar o servidor no NetBeans IDE.
Os usuários e as funções básicas do servidor Tomcat são definidas em tomcat-users.xml. Você pode localizar tomcat-users.xml em seu diretório <CATALINA_BASE>\conf.
Nota: você pode localizar o CATALINA_BASE clicando com o botão direito do mouse no nó do servidor Tomcat na janela Serviços e selecionando Propriedades. As Propriedades do servidor são exibidas. CATALINA_BASE encontra-se na aba Conexão.
Nota: se utilizar o Tomcat 6 incluído nas versões anteriores do IDE, este servidor apresenta o usuário ide definido com uma senha e as funções de administrador e gerenciador. A senha do usuário ide é gerada quando o Tomcat 6 é instalado. Você pode alterar a senha do usuário ide, ou copiar a senha em tomcat-users.xml.
Para adicionar usuários ao Tomcat:
- Abra <CATALINA_BASE>/conf/tomcat-users.xml em um editor.
- Adicione uma função denominada AdminRole.
<role rolename="AdminRole"/>
- Adicione uma função denominada UserRole.
<role rolename="UserRole"/>
- Adicione um usuário denominado admin com a senha adminpw e a função AdminRole.
<user username="admin" password="adminpw" role="AdminRole"/>
- Adicione um usuário denominado user com a senha userpw e a função UserRole.
<user username="user" password="userpw" role="UserRole"/>
O arquivo tomcat-users.xml agora tem a seguinte aparência:
<tomcat-users>
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
...
<role rolename="AdminRole"/>
<role rolename="UserRole"/>
<user username="user" password="userpw" roles="user"/>
<user username="admin" password="adminpw" roles="AdminRole"/>
[User with manager-script role, defined when Tomcat 7 was registered with the IDE]
...
</tomcat-users>
Configurando o método de logon
Ao configurar o método de logon do aplicativo, você pode usar a janela de logon fornecida pelo navegador para autenticação de logon básica. Como alternativa, você pode criar uma página da Web com um formulário de logon. Ambos os tipos de configuração de logon são baseadas na autenticação de usuário/senha.
Configure o método de logon para o aplicativo, configurando web.xml. O arquivo web.xml pode ser encontrado no diretório Arquivos de configuração da janela Projetos.
Logon básico
Quando você usa a configuração de logon básica, a janela de logon é fornecida pelo navegador. Um novo de usuário e senha válidos são necessários para acessar o conteúdo seguro.
As etapas seguintes mostram como configurar um logon básico para o servidor GlassFish. Os usuários Tomcat precisam utilizar logon de formulário.
- Na janela Projetos, clique duas vezes em web.xml localizado no diretório Arquivos de configuração para abrir o arquivo no Editor visual.
- Clique em Segurança na barra de ferramentas para abrir o arquivo na visualização Segurança.
- Expanda o nó Configuração de logon e defina a Configuração de Logon como Básica.
Nota: Se você quiser usar um formulário, selecione Formulário em vez de Básica e especifique o logon e as páginas de erro de logon.
Indique arquivo como o Nome do território. Isso corresponde ao nome do território no qual você criou os usuários no servidor GlassFish.

- Expanda o nó Funções de segurança e clique em Adicionar para adicionar um nome de função.
- Adicione as seguintes Funções de segurança:
- AdminRole. Os usuários adicionados a esta função terão acesso ao diretório secureAdmin do servidor.
- UserRole. Os usuários adicionados a esta função terão acesso ao diretório secureUser do servidor.
Cuidado: os nomes de função do GlassFish devem começar com letra maiúscula.
- Crie e configure um limite de segurança chamado AdminConstraint, fazendo o seguinte:
- Clique em Adicionar restrição de segurança. É exibida uma seção para a nova restrição de segurança.
- Indique AdminConstraint para o Nome de exibição do novo limite de segurança.

- Clique em Adicionar. A caixa de diálogo Adicionar recursos da Web é aberta.
Na caixa de diálogo Adicionar recurso da Web, defina o Nome do recurso como Admin e o Padrão de URL como /secureAdmin/* e clique em OK. A caixa de diálogo se fecha.
Observação: Quando usa um asterisco (*), você está dando ao usuário o acesso a todos os arquivos dessa pasta.

- Selecione Ativar limite de autenticação e clique em Editar. A caixa de diálogo Editar nomes de função é aberta.
- Na caixa de diálogo Editar nomes de função, selecione AdminRole no painel esquerdo, clique em Adicionar e em OK.
Depois de concluídas as etapas acima, o resultado deve ser semelhante à figura seguinte:

- Crie e configure o limite de segurança chamado UserConstraint, fazendo o seguinte:
- Clique em Adicionar limite de segurança para criar um novo limite de segurança.
- Indique UserConstraint para o Nome de exibição do novo limite de segurança.
- Clique em Adicionar para adicionar uma Coleção de recursos da Web.
- Na caixa de diálogo Adicionar recurso da Web, defina o Nome do recurso como User e o Padrão de URL como /secureUser/* e clique em OK.
- Selecione Ativar limite de autenticação e clique em Editar para editar o campo Nome da função.
- Na caixa de diálogo Editar nomes de função, selecione AdminRole e UserRole no painel esquerdo, clique em Adicionar e em OK.
Observação: Você também pode definir o tempo-limite da sessão em web.xml. Para definir o tempo-limite, clique na aba Geral do editor visual e especifique quanto tempo você deseja que a sessão dure. O padrão é 30 minutos.
Logon de formulário
Usar um formulário para logon permite que você personalize o conteúdo das páginas de logon e de erro. As etapas para configurar a autenticação usando um formulário são as mesmas para a configuração do logon básico, exceto que você especifica as páginas de logon e de erro criadas.
As etapas seguintes mostram como configurar um logon de formulário.
- Na janela Projetos, clique duas vezes em web.xml localizado no diretório Web Pages/WEB-INF para abrir o arquivo no editor visual.
- Clique em Segurança na barra de ferramentas para abrir o arquivo na visualização Segurança e expanda o nó Configuração de logon.
- Defina a Configuração de logon como Formulário.
- Defina a Página de logon de formulário, clicando em Explorar e localizando login.jsp.
-
Defina a Página de erro de formulário, clicando em Explorar e localizando loginError.html.
- Usuários do GlassFish: Insira arquivo como o Nome do território. Isso corresponde ao nome do território no qual você criou os usuários no servidor GlassFish. Os usuários do Tomcat não inserem um nome de território.
- Expanda o nó Funções de segurança e clique em Adicionar para adicionar um nome de função.
- Adicione as seguintes Funções de segurança:
| AdminRole |
Os usuários adicionados a esta função têm acesso ao diretório secureAdmin do servidor. |
| UserRole |
Os usuários adicionados a esta função têm acesso ao diretório secureUser do servidor. |
- Crie e configure um limite de segurança chamado AdminConstraint, fazendo o seguinte:
- Clique em Adicionar limite de segurança para criar um novo limite de segurança.
- Indique AdminConstraint para o Nome de exibição do novo limite de segurança.
- Clique em Adicionar para adicionar uma Coleção de recursos da Web.
-
Na caixa de diálogo Adicionar recurso da Web, defina o Nome do recurso como Admin e o Padrão de URL como /secureAdmin/* e clique em OK.
Observação: Quando usa um asterisco (*), você está dando ao usuário o acesso a todos os arquivos dessa pasta.

- Selecione Ativar limite de autenticação e clique em Editar. A caixa de diálogo Editar nomes de função é aberta.
- Na caixa de diálogo Editar nomes de função, selecione AdminRole no painel esquerdo, clique em Adicionar e em OK.
Depois de concluídas as etapas acima, o resultado deve ser semelhante à figura seguinte:

- Crie e configure o limite de segurança chamado UserConstraint, fazendo o seguinte:
- Clique em Adicionar limite de segurança para criar um novo limite de segurança.
- Indique UserConstraint para o Nome de exibição do novo limite de segurança.
- Clique em Adicionar para adicionar uma Coleção de recursos da Web.
- Na caixa de diálogo Adicionar recurso da Web, defina o Nome do recurso como User e o Padrão de URL como /secureUser/* e clique em OK.
- Selecione Ativar limite de autenticação e clique em Editar para editar o campo Nome da função.
- Na caixa de diálogo Editar nomes de função, selecione AdminRole e UserRole no painel esquerdo, clique em Adicionar e em OK.
Observação: Você também pode definir o tempo-limite da sessão em web.xml. Para definir o tempo-limite, clique na aba Geral do editor visual e especifique quanto tempo você deseja que a sessão dure. O padrão é 30 minutos.
Configurando os descritores de deployment de segurança
Se estiver implantando seu aplicativo no servidor de aplicações GlassFish, será necessário configurar os descritores de deployment de segurança em glassfish-web.xml para mapear as funções de segurança definidas em web.xml. Observe que os valores indicados em web.xml são exibidos em glassfish-web.xml. glassfish-web.xml tira estes valores de web.xml para você.
- Clique duas vezes em glassfish-web.xml localizado no diretório Arquivos de configuração na janela Projetos.
Nota: Nas versões do GlassFish anteriores à versão 3.1, este arquivo é chamado sun-web.xml.
- Selecione a aba Segurança para revelar as funções de segurança.
- Selecione o nó da função de segurança AdminRole para abrir o painel Mapeamento de função de segurança.
Clique em Adicionar principal e indique admin para o nome principal. Clique em OK.

- Selecione o nó da função de segurança UserRole para abrir o painel Mapeamento de função de segurança.
- Clique em Adicionar principal e indique user para o nome principal. Clique em OK
- Salve suas alterações no glassfish-web.xml.
Também é possível visualizar e editar o glassfish-web.xml no editor XML, clicando em Editar como XML no canto direito superior do editor visual Aplicação Web Sun. Se você abrir glassfish-web.xml no editor XML, poderá ver que glassfish-web.xml possui as seguintes informações de mapeamento de função de segurança:
<security-role-mapping>
<role-name>AdminRole</role-name>
<principal-name>admin</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>UserRole</role-name>
<principal-name>user</principal-name>
</security-role-mapping>
Implantando e executando o aplicativo
Na janela Projetos, clique com o botão direito do mouse no nó do projeto e escolha Executar.
Observação: Por padrão, o projeto foi criado com o recurso Compilar ao salvar ativado, assim, não é necessário compilar o código primeiro para executar a aplicação no IDE. Para obter mais informações sobre o recurso Compilar ao salvar, consulte a seção Compilar ao salvar no guia Criando, importando e configurando projetos Java.
Depois de construir e fazer o deployment do aplicativo no servidor, a página inicial se abre em seu navegador da Web. Escolha a área segura que deseja acessar, clicando em admin ou user.
Depois do fornecimento de usuário e senha, existem três resultados possíveis:
A senha deste usuário está correta e o usuário tem privilégios para o conteúdo seguro -> a página de conteúdo seguro é exibida

A senha deste usuário está incorreta -> A página de erro é exibida

A senha deste usuário está correta, mas o usuário não tem direito a acessar o conteúdo seguro -> o navegador exibe Erro 403 Acesso ao recurso solicitado foi negado

Resumo
Neste tutorial, você criou uma aplicação Web segura. Você editou as configurações de segurança usando os editores de descritor web.xml e glassfish-web.xml, criando páginas da Web com logons seguros e várias identidades.
Consulte também
Esta página foi modificada pela última vez em 18 de junho de 2009