Índice
- Introdução
- Criando o projeto no Spring Initializr
- Criando a classe WebSecurityConfig
- Criando o controller e fazendo a requisição
Introdução
Spring Security é um modulo que fornece autenticação, autorização e outros recursos de segurança para aplicativos Spring, e hoje ensinarei a proteger sua API REST com Spring Security e Basic Auth (Autenticação Básica) que é um dos métodos mais simples e antigos utilizados para restringir o acesso a uma APIs.
Criando o projeto no Spring Initializr
Na aplicação, estaremos usando Java 21, Maven, Spring Boot 4.0.6 e em add dependencies, adicione Spring Web e Spring Security, ficando igual na print abaixo. Para seguir esse tutorial, você precisará ter o Postman instalado
Após isso, clique em generate e o Spring Initializr vai começar a baixar o projeto. Após baixar, extraia, abra sua IDE de escolha e navegue até File → Open, navegue até o projeto extraido e dê dois cliques. Você verá uma barra de progresso na tela, é o Maven baixando as dependências, espere e quando acabar, o projeto estará pronto para codar.
Criando a classe WebSecurityConfig
Agora vamos criar a classe WebSecurityConfig, ela vai ser a classe encarregada de ter nossas configurações e regras do Spring Security.
Para ficar organizado, crie um package chamado security e crie a classe dentro dele. A classe vai precisar de duas anotações: @Configuration, é a anotação que diz pro Spring que essa é uma classe que define configurações e Beans, e @EnableWebSecurity é a anotação do Spring Security que ativa o sistema de configuração do Spring Security. A classe ficará assim:
Método SecurityFilterChain
Após isso, dentro da classe, vamos criar o método SecurityFilterChain, ele vai ser o método onde terão as regras de configuração do Spring Security. Ele levará a anotação @Bean, seu tipo de retorno será SecurityFilterChain e terá como parâmetro a classe HttpSecurity, é através dessa classe que você faz as configurações do Spring Security. Escreva também um throws Exception porque método do HttpSecurity podem lançar exceções.
Vamos começar a configurar, a primeira coisas que temos que fazer, é desativar o CSRF, ele é uma proteção para formulários HTML, como nossa autenticação será feita por requisição, não é necessário, então desativaremos. Usaremos o método csrfdo HttpSecurity e faremos um lambda para dar disable no csrf com csrf.disable().
Agora vamos criar uma regra que diz que pra cada requisição, o usuário terá que estar logado.
Chamaremos o método authorizeHttpRequests que é o método responsável por definir regras de acesso. ele receberá uma lambda onde usamos anyRequest().authenticated() para exigir autenticação em toda requisição."
Agora precisamos dizer que tipo de autenticação vamos usar, como dito no título, vamos usar Basic Auth, chamaremos o método httpBasic que terá como argumento Customizer.withDefaults(). Essa será nossa ultima configuração com HttpSecurity, termine com return httpSecurity.build() para nosso objeto ser construído com as regras.
Criptografia das senhas
Nossas senhas precisam ser criptografadas para melhor segurança, para isso, criaremos o método passwordEncoder que terá como tipo de retorno a interface PasswordEncoder, usaremos o BCryptPasswordEncoder como nosso método de criptografia, vamos escrever return new BCryptPasswordEncoder.
Agora iremos definir o login e senha que será aceito para a autenticação. Para isso criaremos um metódo bean chamado UserDetailsService com o tipo de retorno UserDetailsService, dentro do método, criaremos o usuario com UserDetails user = User.withUsername("user") e escolher sua senha com .password(passwordEncoder().encode("password"). Aqui colocamos a unica senha aceita como "password" e também criptografamos ela. Agora vamos definir o cargo desse usuário como usuarío com: .roles("USER"). No final, vamos dar .build(); para terminarmos de construir o usuário.
Agora criaremos um InMemoryUserDetailsManager no return e vamos passar o usercomo argumento, fazendo com que o usuário seja guardado na memória.
Com isso, terminamos nossa classe de configuração do Spring Security, agora precisamos de uma requisição básica para testar a autenticação.
Criando o controller e fazendo a requisição
Para fazermos nossa primeira requisição, temos que criar um endpoint, para isso, criaremos um controller, que é onde definimos as urls das requisições. Cria um package para o controller e crie a classe do controller. Acima da declaração da classe, coloque a anotação @RestController. Mais abaixo criaremos nossa endpoint com anotação @GetMapping seguido da url, que vai ser ("/test") e o resto do método:
public String hello(){
return "Authenticated";
}
Agora vamos abrir o postman e fazer uma requisição Get, como escolhi ("/test") como endereço, a url da requisição vai ser http://localhost:8080/test. Apertando send e fazendo a requisição, devemos receber o erro401 Unauthorized` porque não fizemos nossa autenticação ainda.
Abaixo da URL da requisição, apertaremos em Authorization, tenha certeza que em Auth Type, Basic Auth está selecionado, agora em Username e em Password, colocaremos o login que criamos, se você fez do mesmo jeito que eu, o Username é user e a senha é password.
Fazendo o login e apertando em Send de novo, a requisição é feita com sucesso e recebemos o código 200 OK.
























