Vamos para a segunda parte do tutorial.
Quem ainda não viu a primeira parte acesse aqui.
Nossa aplicação vai ter duas roles, a role de admin que poderá acessar as páginas de admin, as roles de user que poderá acessar as páginas de user.
Então vamos criar no WebContent duas pastas:
WebContent
admin
users
Dentro da pasta admin crie uma página JSP chamada adminPage.jsp, com um conteúdo qualquer.
Dentro da pasta users crie uma página JSP chamada usersPage.jsp com um conteúdo qualquer.
Crie uma página index.jsp dentro da pasta WebContent com um conteúdo qualquer.
Essas são as páginas onde nós vamos adicionar segurança, a página adminPage.jsp só usuários com a role admin irá poder acessar, e assim sucessivamente. A página index.jsp usuários não logados poderão acessar.
Com as páginas criadas vamos criar a nossa página de login.
Dentro do diretório WebContent crie uma página chamada login.jsp e digite o seguinte conteúdo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html lang="pt"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Teste Jaas - Login</title> </head> <body> <div id="login_container" class="container"> <div class="well"> <form method="post" action="j_security_check"> <h2>Entrar</h2> <input type="text" placeholder="Email" name="j_username"><br/> <input type="password" placeholder="Senha" name="j_password"> <input type="submit" value="Entrar"></input> </form> </div> </div> </body> </html> |
O action do form j_security_check nada mais é do que uma Servlet que será encarregada da autenticação, e os atributos j_username e j_password são usados para realizar a autenticação.
Com a página de login criada, vamos criar a página de erro, para caso seja informado usuário ou senha inválido, dentro do diretório WebContent crie uma página error.jsp com um conteúdo qualquer.
Seu projeto terá mais ou menos essa “cara” nesse momento:
Agora nós vamos criar um arquivo jboss-web.xml no diretório WEB-INF, esse arquivo é responsável por informar o security domain configurado no standalone.xml.
Digite o seguinte código no jboss-web.xml:
1 2 3 4 |
<?xml version="1.0" encoding="UTF-8"?> <jboss-web> <security-domain>java:/jaas/jaasTesteJaas</security-domain> </jboss-web> |
Agora vamos configurar o arquivo web.xml para configurar quais páginas irão participar do processo de autenticação.
Insira os seguintes códigos abaixo para informar quantas roles nossa aplicação irá usar:
1 2 3 4 5 6 |
<security-role> <role-name>user</role-name> </security-role> <security-role> <role-name>admin</role-name> </security-role> |
Agora vamos informar as nossas páginas de login e error
1 2 3 4 5 6 7 |
<login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> |
Agora nós informar as páginas que irão participar do processo de autenticação
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<security-constraint> <web-resource-collection> <web-resource-name>Acesso Restrito</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Acesso Restrito</web-resource-name> <url-pattern>/users/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>user</role-name> </auth-constraint> </security-constraint> |
No nosso exemplo nós configuramos que a página de admin apenas usuários com a role admin terão acesso, e as páginas dentro do diretório users apenas usuários com a role user terão acesso.
Seu web.xml ficará parecido com isso
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>TesteJaas</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <security-constraint> <web-resource-collection> <web-resource-name>Acesso Restrito</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Acesso Restrito</web-resource-name> <url-pattern>/users/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>user</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>user</role-name> </security-role> <security-role> <role-name>admin</role-name> </security-role> </web-app>
Pronto sua aplicação está configurada.
Para testar basta tentar acessar a página adminPage.jsp e usersPage.jsp que você será redirecionado para a página de login, e só conseguirá acessar após informar usuário e senha.
Baixe a aplicação aqui .
Até o próximo post.
Bruno, basicamente seria o controle de privilégio a rotinas.
Bom dia Juliano
Juliano, nos projetos que eu já trabalhei nós fazemos esse tipo de validação em código mesmo, caso o perfil do usuário tenha acesso apenas a consulta, nós mostramos pra ele apenas consulta, caso tenha acesso a mais funcionalidades, nós mostramos as funcionalidades que ele tem acesso, acredito que deve ser a unica maneira de fazer esse tipo de validação.
Com EJB você consegue colocar previlegios em métodos, por ex, esse método apenas o usuário com perfil X pode acessar, mas na pratica nunca usei, é mais comum você renderizar na tela apenas o que o usuário pode acessar.
Espero que tenha ajudado
Abraços
Bom dia, Muito bom esse post, seria melhor ainda se disponibilizasse outro link para fazer o download da aplicação, pois o link que foi disponibilizado esta inválido, ou seja, não baixa mais a aplicação.
Desde já agradeço e aguardo respostas.
Opa Charles, obrigado por avisar, vou procurar e ver se eu tenho o arquivo ainda.
Abraços
Olá bruno,
Tem como você re-upar o projeto para donwload?
O link está off.
Grato
Maycon, infelizmente não tenho mais o projeto =(
Vou ficar devendo, mas tem alguma dúvida?
Valeww