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/refere
nce/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.
Trocando usuário e senha padrão
● No arquivo application.properties
○ security.user.name=meuUsuario
○ security.user.password=minhaSenha
○ security.user.role=admin
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" />
Prática

Spring Security e Spring Boot Aula - 2018

  • 1.
    Frameworks para Desenvolvimento webem Java Aula 04 - Spring Security
  • 2.
    Spring Security ● Frameworkpara 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;
  • 3.
    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/refere nce/html/introduction.html
  • 4.
    Funcionamento básico URL FiltrosSpring Usuários Permissões Exige Permissão? Analisa
  • 5.
  • 6.
    Configuração Básica ● Como 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.
  • 7.
    Trocando usuário esenha padrão ● No arquivo application.properties ○ security.user.name=meuUsuario ○ security.user.password=minhaSenha ○ security.user.role=admin
  • 8.
    Prática ● Executar oprimeiro teste com o spring-security
  • 9.
    Customizando form delogin ● 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.
  • 10.
    Customizando form delogin Classe de configuração para WebSecurity Criação do Bean na classe Main
  • 11.
    Customizando form delogin Configurando o formulário. Deve ser configurado na classe WebSecurityConfig
  • 12.
    Customizando form delogin Criar página jsp para o login
  • 13.
    Customizando form delogin Controlador para tratar erros e logout
  • 14.
  • 15.
    Autenticação com Basede dados Deve ser criada uma classe de Serviço que implementa a interface UserDetailService e configurar na classe WebSecurityConfig.
  • 16.
  • 17.
  • 18.
  • 19.
    UsuarioPermissao - GrantedAuthority Classeusuário método que busca permissões
  • 20.
  • 21.
    ● Anotar omé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
  • 22.
    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" />
  • 23.