• Nenhum resultado encontrado

Introdução ao Spring security

N/A
N/A
Protected

Academic year: 2021

Share "Introdução ao Spring security"

Copied!
37
0
0

Texto

(1)

Introdução ao Spring security

(2)

O que é um Spring security?

Framework para autorização e autenticação em páginas web;

Vantagem

-> reutilização de código;

(3)

package modelo;

@Entity

public class Usuario implements Serializable{

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private Long id;

private String nome;

private String email;

@Column(unique=true)

private String login;

private String senha;

private String idioma;

private boolean ativo;

@Temporal(TemporalType.DATE)

private Date nascimento;

@ElementCollection

@JoinTable(name="usuario_permissao", uniqueConstraints = {

@UniqueConstraint(columnNames={"usuario","permissao"}) }, joinColumns = JoinColumn(name="usuario"))

@Column(name="permissao", length=50)

private Set<String> permissao = new HashSet<>();

public Usuario() { }

//gets sets equals hashCode e toString omitidos… }

Configuração do Spring Security

3

(4)

Configuração do Spring Security

4

DAO de usuário (backend)

package dao;

public class UsuarioDAO {

private EntityManager em;

public UsuarioDAO() {

this.em = JPAUtil.getEntityManager(); }

public void remover(Usuario usuario){

em.getTransaction().begin();

Usuario aux = em.find(Usuario.class, usuario.getId());

em.remove(aux);

em.flush();

em.getTransaction().commit(); }

public void salvar(Usuario usuario){

em.getTransaction().begin();

em.merge(usuario);

em.getTransaction().commit(); } //continua no próximo slide...

(5)

public Usuario buscarPorId(Long id){

return em.find(Usuario.class, id);

}

public Usuario buscarPorLogin(String login){

String hql = "select u from Usuario u "+

" where u.login = :login ";

return (Usuario)

em.createQuery(hql,Usuario.class) .setParameter("login", login) .getSingleResult();

}

public List<Usuario> buscarTodos(){

return

em.createQuery("from Usuario",Usuario.class).getResultList(); }

}

Configuração do Spring Security

5

(6)

Configuração do Spring Security

6

Service de usuário (backend)

package service;

public class UsuarioService {

private UsuarioDAO usuDAO;

public UsuarioService() {

usuDAO = new UsuarioDAO(); }

public void salvar(Usuario usuario) throws NegocioException{

if (usuario.getNome()==null &&

usuario.getNome().trim().isEmpty())

throw new NegocioException("Nome do usuario não informado.");

if (usuario.getId() == null || usuario.getId() == 0 )

usuario.getPermissao().add("USUARIO");//ROLE_

usuDAO.salvar(usuario); }

(7)

Configuração do Spring Security

7

Service de usuário (backend)

public void remover(Usuario usuario){

usuDAO.remover(usuario); }

public Usuario buscarPorId(Long id){

return usuDAO.buscarPorId(id);

}

public Usuario buscarPorLogin(String login){

return usuDAO.buscarPorLogin(login);

}

public List<Usuario> buscarTodos(){

return usuDAO.buscarTodos();

} }

(8)

Configuração do Spring Security

8

Managedbean de cadastro de usuário (backend)

package controle;

@ManagedBean @ViewScoped

public class CadastroUsuarioBean implements Serializable {

private UsuarioService usuService = new UsuarioService();

private Usuario usuSelecionado;

private Long idUsuario;

public CadastroUsuarioBean() { }

public Boolean isEditing() {

return (usuSelecionado.getId() == null ? false : true);

}

public Usuario getUsuSelecionado() {

return usuSelecionado;

}

public void setUsuSelecionado(Usuario usuSelecionado) {

this.usuSelecionado = usuSelecionado;

}

(9)

Configuração do Spring Security

9

Managedbean de cadastro de usuário (backend)

public Long getIdUsuario() {

return idUsuario;

}

public void setIdUsuario(Long idUsuario) {

this.idUsuario = idUsuario;

}

public void inicializar() {

if (idUsuario != null)

usuSelecionado = usuService.buscarPorId(idUsuario);

if (usuSelecionado == null)

usuSelecionado = new Usuario();

}

public void salvar() {

try {

// salva o usuricante do BD

usuService.salvar(usuSelecionado);

Mensagens.msgSimples("Usuario salvo com sucesso.");

usuSelecionado = new Usuario();

} catch (NegocioException e) {

Mensagens.msgErro("Erro ao salvar", e.getMessage());

} } }

(10)

Configuração do Spring Security

10

Managedbean da pesquisa de usuário (backend)

package controle;

@ManagedBean @ViewScoped

public class PesquisaUsuarioBean implements Serializable{

private UsuarioService usuService=new UsuarioService();

private List<Usuario> usuarios;

private Usuario usuSelecionado;

public PesquisaUsuarioBean() { }

public List<Usuario> getUsuarios() {return usuarios;}

public void setUsuarios(List<Usuario> usuarios) {this.usuarios = usuarios; }

public Usuario getUsuSelecionado() {return usuSelecionado;}

public void setUsuSelecionado(Usuario usuSelecionado) { this.usuSelecionado = usuSelecionado; }

public void inicializar(){

usuarios = usuService.buscarTodos(); }

public void remover(){

(11)

public void remover(){

usuService.remover(usuSelecionado); //remove do BD

usuarios.remove(usuSelecionado); //remove do ArrayList que o p:dataTable está vinculado

Mensagens.msgSimples("Usuario removido com sucesso."); }

public String ativar() {

if (usuSelecionado.isAtivo())

usuSelecionado.setAtivo(false);

else usuSelecionado.setAtivo(true);

try { usuService.salvar(usuSelecionado);

} catch (NegocioException e) {

e.printStackTrace();}

return null; }

public String atribuirPermissao(String permissao) {

Set<String> roles = usuSelecionado.getPermissao();

if (roles.contains(permissao))

roles.remove(permissao);

else roles.add(permissao);

try { usuService.salvar(usuSelecionado);

} catch (NegocioException e) {

e.printStackTrace();}

return null; }

}

Configuração do Spring Security

11

(12)

Configuração do Spring Security

12

cadastro de usuário (frontend)

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"

xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"

xmlns:o="http://omnifaces.org/ui" template="/WEB-INF/templates/Layout.xhtml">

<ui:define name="titulo">

Usuários do sistema

</ui:define>

<ui:define name="conteudo">

<f:metadata>

<o:viewParam name="id" value="#{cadastroUsuarioBean.idUsuario}" />

<f:viewAction action="#{cadastroUsuarioBean.inicializar()}"/>

</f:metadata>

<h:form id="id-form">

<br/>

<p:messages id="id-messages" autoUpdate="true" closable="true" />

<p:toolbar>

<p:toolbarGroup>

<p:commandButton value="Salvar" action="#{cadastroUsuarioBean.salvar}"

update="@form"/>

</p:toolbarGroup>

<p:toolbarGroup align="right">

<p:button value="Pesquisa" outcome="/usuario/pesquisaUsuario.xhtml" />

</p:toolbarGroup> </p:toolbar>

<h1>#{cadastroUsuarioBean.isEditing() ?

'Edição de usuario' : 'Novo usuario'} </h1>

(13)

Configuração do Spring Security

13

cadastro de usuário (frontend)

<p:panelGrid columns="2">

<p:outputLabel for="id-codigo" value="Código" />

<p:inputText id="id-codigo" value="#{cadastroUsuarioBean.usuSelecionado.id}"

readonly="true" disabled="true"/>

<p:outputLabel for="id-nome" value="Nome" />

<p:inputText id="id-nome" value="#{cadastroUsuarioBean.usuSelecionado.nome}"

required="true" requiredMessage="Informe o nome do usuario."/>

<p:outputLabel for="id-email" value="Email" />

<p:inputText id="id-email" value="#{cadastroUsuarioBean.usuSelecionado.email}"

required="true" requiredMessage="Informe o email do usuario."

validatorMessage="E-mail inválido">

<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+"/>

</p:inputText>

<p:outputLabel for="id-login" value="Login" />

<p:inputText id="id-login" value="#{cadastroUsuarioBean.usuSelecionado.login}"

required="true" requiredMessage="Informe o login do usuario."/>

<p:outputLabel value="Senha" for="senha" />

<p:password id="senha" required="true" value="#{cadastroUsuarioBean.usuSelecionado.senha}"

feedback="true" weakLabel="Fraca" goodLabel="Boa"

strongLabel="Forte" promptLabel=" Informe uma senha"

inline="true" match=" confirmacaoSenha" />

<p:outputLabel value="Confirme a senha" for="confirmacaoSenha" />

<p:password id="confirmacaoSenha" required="true" />

<p:outputLabel value="Data de nascimento" for="dataNascimento" />

<p:calendar id="dataNascimento" required="true"

value="#{cadastroUsuarioBean.usuSelecionado.nascimento}"

(14)

Configuração do Spring Security

14

cadastro de usuário (frontend)

<p:outputLabel value="Idioma" for="idioma" />

<p:selectOneMenu id="idioma"

value="#{cadastroUsuarioBean.usuSelecionado.idioma}">

<f:selectItem itemValue="pt_BR" itemLabel="Português" />

<f:selectItem itemValue="en_US" itemLabel="English" />

<f:selectItem itemValue="es_ES" itemLabel="Espanol" />

</p:selectOneMenu>

</p:panelGrid>

</h:form>

</ui:define> </ui:composition>

(15)

Configuração do Spring Security

15

pesquisa de usuário (frontend)

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"

xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:ui="http://xmlns.jcp.org/jsf/facelets"

xmlns:o="http://omnifaces.org/ui" template="/WEB-INF/templates/Layout.xhtml">

<ui:define name="titulo">

Manutenção de usuários do sistema

</ui:define>

<ui:define name="conteudo">

<f:metadata>

<f:viewAction action="#{pesquisaUsuarioBean.inicializar}"/>

</f:metadata>

<h1 class="if-page-title">Pesquisa de usuário</h1>

<h:form id="id-form">

<p:messages id="id-messages" autoUpdate="true" closable="true" />

<p:toolbar>

<p:toolbarGroup>

<p:button value="Novo" outcome="/usuario/cadastroUsuario.xhtml" />

</p:toolbarGroup> </p:toolbar> <p:dataTable id="id-usuarioTable" value="#{pesquisaUsuarioBean.usuarios}" var="usu" rows="20" paginator="true" paginatorAlwaysVisible="false"

emptyMessage="Nenhum usuario cadastrado."

(16)

Configuração do Spring Security

16

pesquisa de usuário (frontend)

<p:column headerText="" style="text-align:center; width: 40px">

<p:commandLink action="#{pesquisaUsuarioBean.ativar}"

process="@this"

update="@this">

<p:graphicImage library="ifmg"

name="/images/usuario_ativo_#{usu.ativo}.png"/>

<f:setPropertyActionListener value="#{usu}"

target="#{pesquisaUsuarioBean.usuSelecionado}"/>

</p:commandLink> </p:column>

<p:column headerText="Código" style="text-align:right; width: 100px">

<h:outputLabel value="#{usu.id}" />

</p:column>

<p:column headerText="Nome do Usuario">

<h:outputLabel value="#{usu.nome}" />

</p:column>

<p:column headerText="Idioma" style="text-align:center; width: 80px">

<p:graphicImage library="ifmg"

name="/images/bandeira_#{usu.idioma}.png"/>

</p:column>

<p:column headerText="Email">

<h:outputLabel value="#{usu.email}" />

</p:column>

<p:column headerText="Permissões"

(17)

Configuração do Spring Security

17

pesquisa de usuário (frontend)

<p:commandLink action="#{pesquisaUsuarioBean.atribuirPermissao('ADMINISTRADOR')}"

process="@this"

update="@this"

title="Usuário Administrador">

<p:graphicImage library="ifmg"

name="/images/ROLE_ADMINISTRADOR_#{usu.permissao.contains('ADMINISTRADOR')}.png"/>

<f:setPropertyActionListener value="#{usu}"

target="#{pesquisaUsuarioBean.usuSelecionado}"/>

</p:commandLink>

<p:commandLink action="#{pesquisaUsuarioBean.atribuirPermissao('VIP')}"

process="@this"

update="@this"

title="Usuário VIp">

<p:graphicImage library="ifmg"

name="/images/ROLE_USUARIO_VIP_#{usu.permissao.contains('VIP')}.png"/>

<f:setPropertyActionListener value="#{usu}"

target="#{pesquisaUsuarioBean.usuSelecionado}"/>

</p:commandLink> </p:column>

<p:column style="text-align:center; width: 80px">

<p:button icon="ui-icon-pencil"

title="Editar"

outcome="cadastroUsuario">

<f:param name="id" value="#{usu.id}" />

</p:button> </p:column>

(18)

Configuração do Spring Security

18

pesquisa de usuário (frontend)

<p:column style="text-align:center; width: 80px">

<p:commandButton icon="ui-icon-trash"

title="Excluir"

process="@this"

update="id-usuarioTable"

oncomplete="PF('confirmacaoExclusao').show();">

<f:setPropertyActionListener value="#{usu}"

target="#{pesquisaUsuarioBean.usuSelecionado}"/> </p:commandButton> </p:column> </p:dataTable> <p:confirmDialog id="id-confirmaExclusaoDialog" widgetVar="confirmacaoExclusao"

message="Tem certeza de deseja excluir o usuário #{pesquisaUsuarioBean.usuSelecionado.nome}?"

header="Exclusão de usuario"

showEffect="fade">

<p:button value="Não" onclick="PF('confirmacaoExclusao').hide(); return false;" />

<p:commandButton value="Sim"

update="id-usuarioTable" oncomplete="PF('confirmacaoExclusao').hide();" action="#{pesquisaUsuarioBean.remover}"/> </p:confirmDialog> </h:form> </ui:define> </ui:composition>

(19)

Configuração do Spring Security

19

Insira as dependências do projeto no pom.xml:

Passo um

<!-- Spring Security (autenticação e autorização) --> <dependency>

<groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>3.1.4.RELEASE</version>

</dependency> <dependency>

<groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>3.1.4.RELEASE</version>

</dependency> <dependency>

<groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>3.1.4.RELEASE</version>

</dependency>

<!-- Commons Logging (abstrai a implementação de logging) --> <dependency>

<groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version>

<scope>compile</scope> </dependency>

<!-- API de Servlet --> <dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId> <version>3.0.1</version>

<scope>provided</scope> </dependency>

(20)

Configuração do Spring Security

20

Insira dois listenners no início do web.xml:

<

listener

>

<

listener-class

>

org.springframework.web.context.ContextLoaderListener

</

listener-class

>

</

listener

>

<

listener

>

<

listener-class

>

org.springframework.security.web.session.HttpSessionEventPublisher

</

listener-class

>

</

listener

>

Passo dois

(21)

Configuração do Spring Security

21

Insira um filter no final do web.xml:

Passo três

<

filter

>

<

filter-name

>

springSecurityFilterChain

</

filter-name

>

<

filter-class

>

org.springframework.web.filter.DelegatingFilterProxy

</

filter-class

>

</

filter

>

<

filter-mapping

>

<

filter-name

>

springSecurityFilterChain

</

filter-name

>

<

url-pattern

>

/*

</

url-pattern

>

<

dispatcher

>

FORWARD

</

dispatcher

>

<

dispatcher

>

REQUEST

</

dispatcher

>

</

filter-mapping

>

(22)

Configuração do Spring Security

22

Crie e configure o arquivo applicationContext.xml:

Passo quatro

<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> <http auto-config="true">

<intercept-url pattern="/**" access="ROLE_ADMINISTRADORES" /> </http>

<authentication-manager>

<authentication-provider> <user-service>

<user name="joao" password="joao" authorities="ROLE_VIP" />

<user name="manoel" password="manoel" authorities="ROLE_ADMINISTRADORES" />

</user-service> </authentication-provider> </authentication-manager>

(23)

Configuração do Spring Security

23

Crie o link para logout em algum lugar do sistema:

Passo cinco

<

li

>

<

h:outputLink

valeu

=

"/web01/j_spring_security_logout"

>

<

i

class

=

"fa

fa-fw

fa-adn"

></

i

>

Sair

</

h:outputLink

>

</

li

>

Url padrão do spring para fazer logout com o nome da aplicação.

Nesse caso, foi criado um item do menu na página

(24)

<http pattern="/javax.faces.resource/**" security="none" /> <http auto-config="true" use-expressions="true">

<intercept-url pattern="/index.xhtml" access="isAuthenticated()" />

<intercept-url pattern="/modelo/**" access="hasAnyRole('ADMINISTRADOR', 'VIP')" /> <intercept-url pattern="/fabricante/**" access="hasAnyRole('ADMINISTRADOR', 'VIP')" /> <intercept-url pattern="/usuario/**" access="hasAnyRole('ADMINISTRADOR')" />

<intercept-url pattern="/**" access="denyAll" /> </http>

<authentication-manager>

<authentication-provider> <user-service>

<user name="joao" password="joao" authorities="VIP" />

<user name="manoel" password="manoel" authorities="ADMINISTRADOR" />

</user-service> </authentication-provider> </authentication-manager>

Configuração do Spring Security

24

Configurando a tag <http> no arquivo de configuração do spring:

Passo seis

Libera tudo da pasta ‘resource’

Libera ou nega acesso de acordo com os papéis do usuário

Podemos tirar a palavra ROLE qdo usamos expressões Habilitei expressões

(25)

package security;

import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.User; public class UsuarioSistema extends User{

private static final long serialVersionUID = 1L;

private Usuario usuario;

public UsuarioSistema(Usuario usuario, Collection<? extends GrantedAuthority> authorities) { super(usuario.getEmail(), usuario.getSenha(), authorities);

this.usuario = usuario; }

public Usuario getUsuario() { return usuario;

} }

Configuração do Spring Security

25

Criando uma classe para representar o usuário do spring security

Acessando a base de dados

(26)

Configuração do Spring Security

26

Criando a classe que o spring security usará para validar o usuário

Acessando a base de dados

Essa classe será instanciada pelo próprio Spring para

validar o usuário. package security; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import modelo.Usuario; import service.UsuarioService;

public class AppUserDetailsService implements UserDetailsService {

(27)

@Override

public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {

UsuarioService usuarios = new UsuarioService(); Usuario usuario = usuarios.buscarPorLogin(login); UsuarioSistema user = null;

if (usuario != null) {

user = new UsuarioSistema(usuario, getGrupos(usuario)); }

return user;

}

private Collection<? extends GrantedAuthority> getGrupos(Usuario usuario) {

List<SimpleGrantedAuthority> authorities = new ArrayList<>();

for (String grupo : usuario.getPermissao()) {

authorities.add(new SimpleGrantedAuthority(grupo.toUpperCase())); }

return authorities;

} }

Configuração do Spring Security

27

(28)

Configuração do Spring Security

28

Acessando o usuário logado

package security; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.faces.context.FacesContext; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @ManagedBean @RequestScoped

public class Seguranca {

public String getNomeUsuario() {

String nome = null;

UsuarioSistema usuarioLogado = getUsuarioLogado();

if (usuarioLogado != null) {

nome = usuarioLogado.getUsuario().getNome(); }

return nome;

(29)

Configuração do Spring Security

29

Acessando o usuário logado

private UsuarioSistema getUsuarioLogado() {

UsuarioSistema usuario = null;

UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken) FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();

if (auth != null && auth.getPrincipal() != null) {

usuario = (UsuarioSistema) auth.getPrincipal(); }

return usuario;

} }

<div style="float: left; line-height: 50px; margin-right: 80px"> Olá #{seguranca.nomeUsuario}!

</div>

Insira o html abaixo no layout da página.

(30)

<http pattern="/login.xhtml" security="none" /> <http pattern="/erro.xhtml" security="none" />

<http pattern="/javax.faces.resource/**" security="none" />

<http auto-config="false" use-expressions="true">

<intercept-url pattern="/index.xhtml" access="isAuthenticated()" />

<intercept-url pattern="/modelo/**" access="hasAnyRole('ADMINISTRADOR', 'VIP')" /> <intercept-url pattern="/fabricante/**" access="hasAnyRole('ADMINISTRADOR', 'VIP')" /> <intercept-url pattern="/acessorio/**" access="hasAnyRole('ADMINISTRADOR', 'VIP')" /> <intercept-url pattern="/usuario/**" access="hasAnyRole('ADMINISTRADOR')" />

<intercept-url pattern="/automovel/**" access="hasAnyRole('ADMINISTRADOR', 'VIP')" /> <intercept-url pattern="/**" access="denyAll" />

<form-login login-page="/login.xhtml" authentication-failure-url="/login.xhtml?invalid=true"

default-target-url="/" always-use-default-target="true" /> <logout logout-url="/j_spring_security_logout" invalidate-session="true" /> </http>

Configuração do Spring Security

30

Personalizando a página de login

Precisamos modificar novamente o arquivo de configuração do spring

Não será automático mais Informei as páginas de login e erro do sistema

Não iremos aplicar segurança nas páginas de

(31)

Configuração do Spring Security

31

Personalizando a página de erro

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:o="http://omnifaces.org/ui" template="/WEB-INF/templates/LayoutExterno.xhtml">

<ui:define name="titulo">

Sistema de locação de veículos

</ui:define>

<ui:define name="conteudo">

<br/>

<h1>Erro ao processar a requisição.</h1> <h:link outcome="index">

<i class="fa fa-fw fa-repeat"></i> Voltar

</h:link> </ui:define> </ui:composition>

(32)

Configuração do Spring Security

32

Personalizando a página de login

<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:p="http://primefaces.org/ui" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:o="http://omnifaces.org/ui" template="/WEB-INF/templates/LayoutExterno.xhtml">

<ui:define name="titulo">

Sistema de locação de automóveis - Login

</ui:define>

<ui:define name="conteudo">

<f:metadata>

<f:viewParam name="dummy" />

<f:event listener="#{loginBean.preRender}" type="preRenderView" />

</f:metadata>

<div id="login-dialog">

<h1>Login</h1>

<h:form id="frm" prependId="false">

<p:messages id="messages" autoUpdate="true" closable="true" /> <!-- Continua no próximo slide -->

(33)

Configuração do Spring Security

33

Personalizando a página de login

<h:panelGrid columns="2" styleClass="grid-login">

<p:outputLabel value="Login" />

<p:inputText size="30" id="j_username" value="#{loginBean.login}" />

<p:outputLabel value="Senha" />

<p:password size="30" id="j_password" />

<h:panelGroup/>

<p:commandButton value="Login" action="#{loginBean.login}" ajax="false" />

</h:panelGrid> </h:form> </div>

</ui:define></ui:composition>

(34)

Configuração do Spring Security

34

Criando o Managedbean de login

package controle; import java.io.IOException; import javax.enterprise.context.SessionScoped; import javax.faces.bean.ManagedBean; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import util.Mensagens; @ManagedBean @SessionScoped

public class LoginBean {

private static final long serialVersionUID = 1L;

private FacesContext facesContext;

private ExternalContext externalContext;

private HttpServletRequest request;

private HttpServletResponse response;

(35)

Configuração do Spring Security

35

Criando o Managedbean de login

public LoginBean() {

facesContext = FacesContext.getCurrentInstance();

externalContext = facesContext.getExternalContext();

request = (HttpServletRequest) externalContext.getRequest();

response = (HttpServletResponse) externalContext.getResponse(); }

public void preRender() {

if ("true".equals(request.getParameter("invalid"))) {

Mensagens.msgErro("Login inválido", "Usuário ou senha inválido!"); }

}

public void login() throws ServletException, IOException {

RequestDispatcher dispatcher = request.getRequestDispatcher("/j_spring_security_check");

dispatcher.forward(request, response);

facesContext.responseComplete(); }

public String getLogin() { return login; }

public void setLogin(String login) { this.login = login; }

} }

(36)

Configuração do Spring Security

36

Protegendo componentes

public boolean isPermitidoSalvarFabricante(){

ExternalContext externalContext =

FacesContext.getCurrentInstance().getExternalContext();

return externalContext.isUserInRole("ADMINISTRADOR");

}

Segurança.java

<p:toolbarGroup>

<p:commandButton value="Salvar"

action="#{cadastroFabricanteBean.salvar}"

update="@form"

disabled="#{(not seguranca.permitidoSalvarFabricante)}"/> </p:toolbarGroup>

(37)

Bibliografia

Referências

Documentos relacionados

Esta foliação ocorre ao longo de faixas miloníticas, com espessura desde submilimétrica (Fig. 23) até métrica, nas quais é caracterizada pela orientação de ribbons

É termo utilizado para descrever um método de ataque, onde alguém faz uso da persuasão, muitas vezes abusando da ingenuidade ou confiança do usuário, para obter informações que

Em pacientes que foram submetidos à cirurgia de revascularização (por exemplo: colocação de ponte de safena para substituir segmentos de artérias do coração entupidas) do

Aqui na Principled Technologies, comparamos a experiência de conectar um sistema Dell Latitude Ultrabook com o novo processador Intel Core da 5ª geração a um monitor HD de

Quando o diálogo Expert Level Parameter aparecer, selecione Variable Selection, , então a seguinte caixa de diálogo aparecerá:... Este diálogo também pode ser acessado através

No prazo de até trinta e seis meses, a contar da data da publicação deste Decreto, os serviços de transporte coletivo aéreo e os equipamentos de acesso às

A fim de evitar ou, quando tal não for praticável, reduzir as emissões para o solo e para a água provenientes do armazenamento de estrume sólido, a MTD consiste em utilizar

O Artigo 79 da Convenção de Viena prevê a liberação de uma obrigação que se tornou impossível devido a um impedimento superveniente não imputável a uma parte, de