Utilizando JSF, JAAS e Servlet 3.0 Login no JBoss AS 7.1.2 (JBoss EAP 6) – Parte 2

Postado em Atualizado em

Primeira Parte!

Criando e Configurando a Aplicação Web

Crie uma aplicação Web com suporte a JSF. No final do post vou deixar a aplicação que utilizei.

Na sua aplicação crie o arquivo jboss-web.xml e deixe-o como abaixo:

<jboss-web>
   <security-domain>AppRealm</security-domain>
</jboss-web>

Isso “diz” a nossa aplicação que utilizaremos o security domain AppRealm para realizar a autenticação.

Agora no arquivo faces-config.xml vamos configurar a navegação das nossas páginas. Deixe-o como abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">

<navigation-rule>
  <display-name>Login.xhtml</display-name>
  <from-view-id>/Login.xhtml</from-view-id>
  <navigation-case>
    <from-outcome>failure</from-outcome>
    <to-view-id>/Login.xhtml</to-view-id>
  </navigation-case>
</navigation-rule>

<navigation-rule>
  <display-name>Login.xhtml</display-name>
  <from-view-id>/Login.xhtml</from-view-id>
  <navigation-case>
    <from-outcome>index</from-outcome>
    <to-view-id>/index.xhtml</to-view-id>
  </navigation-case>
</navigation-rule>

<navigation-rule>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/Login.xhtml</to-view-id>
</navigation-case>
</navigation-rule>

</faces-config>

Vamos agora criar o Managed Bean que ficará responsável pelo autenticação dos nossos usuários. Crie o loginMBean como abaixo:

package com.magnani.sistema.controller;

import java.security.Principal;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@ManagedBean(name="loginMBean")
public class LoginMBean {

private String username;
private String password;
private Date currentDate = new Date();

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

public LoginMBean(){
   if(session != null){
   session.invalidate();
  }
}

public String login(){
   String message = "";

   try {

   request.login(username, password);
   Principal principal = request.getUserPrincipal();

   if(request.isUserInRole("Administrador")){
     message = "Usuário : " + principal.getName() + " Você é Administrador e tem direito a todos as funcionalidades!";

   }else if(request.isUserInRole("Diretor")){
     message = "Usuário : " + principal.getName() + "Você é um Diretor e pode visualizar todos os relatórios gerenciais!";

   }else if(request.isUserInRole("Operador")){
     message = "Usuário : " + principal.getName() + "Você é um Operador, Por Favor Atenda bem o cliente!";
  }

  FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, message, null));

  return "index";

  } catch (ServletException e) {
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu algum problema e o Login Falhou!", null));
    e.printStackTrace();
 }
   return "failure";
 }

 public String logout(){
   if(session != null){
     session.invalidate();
 }                                                                                                                                                     t
  return "logout";
 }

//gettes e setters

Agora crie a página de login como abaixo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">

<head>
<link type="text/css" rel="stylesheet" href="#{facesContext.externalContext.requestContextPath}/resources/css/theme.css" />
</head>
  <h:body styleClass="body">
  <h:form>
  <center>
  <h:messages errorClass="errorMessage" infoClass="infoMessage" warnClass="warnMessage"/>
  <h:panelGrid columns="2">
  <h:outputText value="Usuário : "/>
  <h:inputText id="username" value="#{loginMBean.username}"/>

  <h:outputText value="Senha : "/>
  <h:inputSecret id="password" value="#{loginMBean.password}"/>

  <h:commandButton value="OK" action="#{loginMBean.login}" type="submit"/>
  <h:commandButton value="Limpar" type="reset"/>

  </h:panelGrid>
 </center>
 </h:form>
</h:body>
</html>

Agora vamos criar a página index.xhtml que conterá os links para cada funcionalidade….

Obs: O post ainda está sendofinalizado mas já dá para ver alguma coisa funcionando🙂Vou atualizando durante a semana.

Abs

12 comentários em “Utilizando JSF, JAAS e Servlet 3.0 Login no JBoss AS 7.1.2 (JBoss EAP 6) – Parte 2

    victor neves disse:
    25 de fevereiro de 2013 às 9:27

    deixa eu ver se eu entendi… quando voce chama request.login(username, password); o java faz alguma magia obscura que faz tipo um “bind” entre a aplicação e o local onde estão registrados os usuários?! oO hehehe

      Mauricio Magnani Jr respondido:
      25 de fevereiro de 2013 às 10:03

      E ai Victor hahahaha eu vou explicar essa parte ainda mas é bem isso mesmo, tipo mágica😀

      Eu to curtindo fazer assim rsrsrs bem mais fácil e prático.

      Abs

    guiobome10 disse:
    1 de março de 2013 às 8:55

    Post simples, mas era exatamente o que eu estava procurando a mais de 2 semanas, valeu cara! Exatamente isso que eu precisava, queria saber como fazer o login do usuário via form mas controlar no ManagedBean.

      Mauricio Magnani Jr respondido:
      1 de março de 2013 às 17:44

      Que bom que ajudou cara😀
      Ainda não terminei mas já dá pra ver funcionando!!!!

      Abs

    Ataxexe disse:
    5 de março de 2013 às 14:13

    Show de bola! Apesar de eu não ser um grande fã de JSF, posso aproveitar a infra e usar com outras tecnologias.

    Ah! Coloca um link pra primeira parte no início do post😉

    Felipe disse:
    2 de abril de 2013 às 13:49

    Seu post me ajudou muito, pesquisei por um bom tempo até achar ele, e tem praticamente tudo que eu precisava, só fiquei com um duvida.

    Pelo seu código você usa session.invalidate(); para o logout, existe alguma diferença entre usar isso ou o método request.logout();?

      Mauricio Magnani Jr respondido:
      2 de abril de 2013 às 14:11

      Oi Felipe fico feliz que tenha ajudado… eu mesmo tive que fazer alguns testes por não conhecer a fundo o Servlet 3.0….

      A chamada session.invalidate(); remove todos a sessão e todos os atributos relacionados!

      Já request.logout(); apenas “seta” como null quando os métodos getUserPrincipal, getRemoteUser ou getAuthType são chamados na request.

      Abraços

    AitonDMT disse:
    25 de abril de 2013 às 9:03

    Só ajudando a corrigir, no faces-config.xml a está como “failure” e no Bean esá retornando failed. =]

    joão carlos disse:
    20 de junho de 2013 às 10:53

    Não tem configuração do web.xml do tipo?

    Restricted
    *.jsf
    *.xhtml

    *

    NONE

    *

    FORM

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s