Post on 14-Jul-2015
Frameworks para Desenvolvimento web em
JavaAula 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.
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 loginClasse de configuração para WebSecurity
Criação do Bean na classe Main
Customizando form de loginConfigurando o formulário. Deve ser configurado na classe WebSecurityConfig
Customizando form de loginCriar página jsp para o login
Customizando form de loginControlador para tratar erros e logout
Liberar URL's
Autenticação com Base de dadosDeve 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