andreforchesatto
3,487 views
31 slides
Nov 22, 2014
Slide 1 of 31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
About This Presentation
Spring Security e Spring Boot Aula pós graduação em Java UTFPR Pato Branco.
Size: 722.91 KB
Language: pt
Added: Nov 22, 2014
Slides: 31 pages
Slide Content
Frameworks para
Desenvolvimento web em
Java
Aula 04 - Spring Security
Spring Security
●Framework para controle de acesso a
sistemas criado em 2003 com licença
Apache 2.0;
●Altamente customizavel;
●Simples e fácil de integrar com vários tipos
de framework;
●Utilizado por grandes corporações desde
agências do governo, bancos e instituições
militares;
Spring Security - Funcionalidades
●Controle de acesso HTTP e HTTPS;
●Configuração não intrusiva;
●Utilização não invasiva, utilizando AOP;
●Controle de acesso a métodos das regras de
negócio;
●Encoder da senha
●Tipos de autenticação:
○OpenID
○LDAP
○Basic authentication HTTP
○Base de dados
Todos tipos de autenticação:
http://docs.spring.io/spring-security/site/docs/3.2.
x/reference/html/introduction.html
Funcionamento básico
URL Filtros Spring
Usuários
Permissões
Exige Permissão? Analisa
Download com Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Para projetos com Spring-boot:
Configuração Básica
●Com o Spring-boot já vem configurado por
padrão:
○Bloqueio de URL
○Usuário e senha em memória
○Liberação de arquivos static/resource
○Gera uma senha padrão para testes
●Todas as configurações podem ser
reescritas.
Prática
●Executar o primeiro teste com o spring-
security
Customizando form de login
●Deverá ser criada uma classe para
customizar os comportamentos do Spring
●Esta classe pode estender de
WebSecurityConfigurerAdapter para
facilitar a configuração.
●Para o Spring reconhecer a configurar
deverá ser criado um Bean na classe
principal de configuração.
Customizando form de login
Classe de configuração para WebSecurity
Criação do Bean na classe Main
Customizando form de login
Configurando o formulário. Deve ser configurado
na classe WebSecurityConfig
Customizando form de login
Criar página jsp para o login
Customizando form de login
Controlador para tratar erros e logout
Liberar URL's
Autenticação com Base de dados
Deve ser criada uma classe de Serviço que implementa a interface
UserDetailService e configurar na classe WebSecurityConfig.
Diagrama Usuários e Permissões
Service - UsuarioService
Usuario - UsuarioDetails
UsuarioPermissao - GrantedAuthority
Classe usuário método que busca permissões
Usuário da Sessão
●Anotar o métodos com a regra de segurança
Segurança nos métodos
@EnableGlobalMethodSecurity(securedEnabled=true, prePostEnabled=true)
●Configurar WebSecurityConfig para interceptar
anotações de segurança nos métodos
Segurança nos métodos
●Liberar para anonimos utilizarem
○@Secured("IS_AUTHENTICATED_ANONYMOUSLY")
●Pode ser utilizado JSR-255
public interface BankService {
@PreAuthorize("isAnonymous()")
public Account readAccount(Long id);
@PreAuthorize("isAnonymous()")
public Account[] findAccounts();
@PreAuthorize("hasAuthority('ROLE_TELLER')")
public Account post(Account account, double amount);
}
<global-method-security jsr250-annotations="enabled" />
Tag Lib JSP
●É possível definir se partes das telas serão
ou não renderizadas através de tag de
segurança.
●Por padrão as tags funcionando com JSP
○<sec:authentication property="principal.username" />
○<sec:authorize access="hasRole('supervisor')">
○<sec:authorize url="/admin">
http://doanduyhai.wordpress.com/2012/02/26/spring-security-part-v-security-tags/
http://docs.spring.io/spring-webflow/docs/2.3.2.RELEASE/reference/html/ch13s11.html
LoginManagedBean - JSF
Login.xhtml - JSF
LoginManagedBean - Logout
Tag Lib Facelets JSF
●Para funcionar em Facelets é nescessário
utilizar outro jar do spring e realizar algumas
configurações:
○Configurar jar;
○Criar arquivo de tag facelets
○Configurar web.xml
http://docs.spring.io/spring-webflow/docs/2.3.2.RELEASE/reference/html/ch13s11.html
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/springsecurity.taglib.xml</param-value>
</context-param>
Se existir mais de um taglib facelets no
projeto, os caminho dos arquivos devem
ser separados por (;) ponto e vírgula.