0% acharam este documento útil (0 voto)
0 visualizações

Spring Security

Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
0 visualizações

Spring Security

Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 5

✅ O que é o Spring Security?

É um framework de segurança altamente personalizável do Spring,


usado para:

●​ Autenticação (saber quem está acessando)​

●​ Autorização (saber o que esse usuário pode fazer)​

☑️ Principais recursos
✅ Proteção de endpoints HTTP​
✅ Controle de acesso baseado em roles (perfis)​
✅ Login com formulário ou HTTP Basic​
✅ Integração com banco de dados para autenticação​
✅ Criptografia de senhas​
✅ Filtro de requisições (filter chain)

🔒 Exemplo rápido: protegendo uma API


1. Dependência no pom.xml:
xml
CopiarEditar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. Por padrão, tudo será protegido

Se você rodar sua aplicação agora, verá que qualquer requisição


exige login.
A senha do usuário user será gerada automaticamente no console:

sql
CopiarEditar
Using generated security password: 5b29cf92-5e...

✅ Autenticação com usuário em memória


Você pode configurar um usuário fixo na aplicação:

java
CopiarEditar
@Configuration
public class SecurityConfig {

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws
Exception {
return http
.authorizeHttpRequests(auth -> auth
.anyRequest().authenticated()
)
.formLogin(withDefaults())
.build();
}

@Bean
public UserDetailsService users() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("admin")
.password("1234")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user);
}
}
🔐 Autenticação com banco de dados (Spring
Security + Spring Data JPA)

1. Criar a entidade Usuario


java
CopiarEditar
@Entity
public class Usuario {
@Id @GeneratedValue
private Long id;

private String username;


private String password;
private String role; // Ex: "ADMIN", "USER"

// getters e setters
}

2. Repositório
java
CopiarEditar
public interface UsuarioRepository extends JpaRepository<Usuario,
Long> {
Optional<Usuario> findByUsername(String username);
}

3. Classe que implementa UserDetailsService


java
CopiarEditar
@Service
public class MeuUserDetailsService implements UserDetailsService {

@Autowired
private UsuarioRepository usuarioRepo;

@Override
public UserDetails loadUserByUsername(String username) throws
UsernameNotFoundException {
Usuario usuario = usuarioRepo.findByUsername(username)
.orElseThrow(() -> new
UsernameNotFoundException("Usuário não encontrado"));

return User.builder()
.username(usuario.getUsername())
.password(usuario.getPassword())
.roles(usuario.getRole())
.build();
}
}

4. Codificação de senhas

Você nunca deve salvar senhas como texto puro. Use um


PasswordEncoder:

java
CopiarEditar
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

Na hora de salvar o usuário, codifique assim:

java
CopiarEditar
usuario.setPassword(passwordEncoder.encode("123456"));

🔐 Controlando acesso por perfil


java
CopiarEditar
.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/usuario/**").hasRole("USER")
.anyRequest().authenticated()
)

🧪 Desabilitar temporariamente a segurança


(para testes)
java
CopiarEditar
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws
Exception {
return http
.csrf(csrf -> csrf.disable())
.authorizeHttpRequests(auth ->
auth.anyRequest().permitAll())
.build();
}

Você também pode gostar