<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nathan Mendes</title>
    <description>The latest articles on DEV Community by Nathan Mendes (@nathaandev).</description>
    <link>https://dev.to/nathaandev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3395794%2Fc86a2ee0-f6ef-4f15-aadc-819d8fbb7161.jpeg</url>
      <title>DEV Community: Nathan Mendes</title>
      <link>https://dev.to/nathaandev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nathaandev"/>
    <language>en</language>
    <item>
      <title>Protegendo sua API REST com Spring Security e Basic Auth</title>
      <dc:creator>Nathan Mendes</dc:creator>
      <pubDate>Sat, 06 Jun 2026 21:34:00 +0000</pubDate>
      <link>https://dev.to/nathaandev/protegendo-sua-api-rest-com-spring-security-e-basic-auth-52f9</link>
      <guid>https://dev.to/nathaandev/protegendo-sua-api-rest-com-spring-security-e-basic-auth-52f9</guid>
      <description>&lt;h2&gt;
  
  
  Índice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;Criando o projeto no Spring Initializr&lt;/li&gt;
&lt;li&gt;Criando a classe WebSecurityConfig&lt;/li&gt;
&lt;li&gt;Criando o controller e fazendo a requisição&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Introdução
&lt;/h1&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h1&gt;
  
  
  Criando o projeto no &lt;a href="https://start.spring.io/index.html" rel="noopener noreferrer"&gt;Spring Initializr&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;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&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvy2o2w8f6btu3ty5zhzx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvy2o2w8f6btu3ty5zhzx.png" alt=" " width="799" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h1&gt;
  
  
  Criando a classe WebSecurityConfig
&lt;/h1&gt;

&lt;p&gt;Agora vamos criar a classe &lt;code&gt;WebSecurityConfig&lt;/code&gt;, ela vai ser a classe encarregada de ter nossas configurações e regras do Spring Security.&lt;br&gt;
Para ficar organizado, crie um package chamado &lt;code&gt;security&lt;/code&gt; e crie a classe dentro dele. A classe vai precisar de duas anotações: &lt;code&gt;@Configuration&lt;/code&gt;, é a anotação que diz pro Spring que essa é uma classe que define configurações e Beans, e &lt;code&gt;@EnableWebSecurity&lt;/code&gt; é a anotação do &lt;code&gt;Spring Security&lt;/code&gt; que ativa o sistema de configuração do &lt;code&gt;Spring Security&lt;/code&gt;. A classe ficará assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgiii4s8owoawapatfdw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmgiii4s8owoawapatfdw.png" alt=" " width="799" height="226"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Método SecurityFilterChain
&lt;/h2&gt;

&lt;p&gt;Após isso, dentro da classe, vamos criar o método &lt;code&gt;SecurityFilterChain&lt;/code&gt;, ele vai ser o método onde terão as regras de configuração do Spring Security. Ele levará a anotação &lt;code&gt;@Bean&lt;/code&gt;, seu tipo de retorno será SecurityFilterChain e terá como parâmetro a classe &lt;code&gt;HttpSecurity&lt;/code&gt;, é através dessa classe que você faz as configurações do Spring Security. Escreva também um &lt;code&gt;throws Exception&lt;/code&gt; porque método do HttpSecurity podem lançar exceções.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4mmlmqs7rc03l1h20mvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4mmlmqs7rc03l1h20mvx.png" alt=" " width="798" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;csrf&lt;/code&gt;do &lt;code&gt;HttpSecurity&lt;/code&gt; e faremos um lambda para dar disable no &lt;code&gt;csrf&lt;/code&gt; com &lt;code&gt;csrf.disable()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrzz2xtrrw42bnuqw25c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdrzz2xtrrw42bnuqw25c.png" alt=" " width="793" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos criar uma regra que diz que pra cada requisição, o usuário terá que estar logado.&lt;/p&gt;

&lt;p&gt;Chamaremos o método &lt;code&gt;authorizeHttpRequests&lt;/code&gt; que é o método responsável por definir regras de acesso. ele receberá uma lambda onde usamos &lt;code&gt;anyRequest().authenticated()&lt;/code&gt; para exigir autenticação em toda requisição."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22psqnf3wzl4nfoals7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22psqnf3wzl4nfoals7s.png" alt=" " width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora precisamos dizer que tipo de autenticação vamos usar, como dito no título, vamos usar Basic Auth, chamaremos o método &lt;code&gt;httpBasic&lt;/code&gt; que terá como argumento &lt;code&gt;Customizer.withDefaults()&lt;/code&gt;. Essa será nossa ultima configuração com HttpSecurity, termine com &lt;code&gt;return httpSecurity.build()&lt;/code&gt; para nosso objeto ser construído com as regras.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1qj38v7vr7gqyzeecyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn1qj38v7vr7gqyzeecyj.png" alt=" " width="798" height="258"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Criptografia das senhas
&lt;/h2&gt;

&lt;p&gt;Nossas senhas precisam ser criptografadas para melhor segurança, para isso, criaremos o método &lt;code&gt;passwordEncoder&lt;/code&gt; que terá como tipo de retorno a interface &lt;code&gt;PasswordEncoder&lt;/code&gt;, usaremos o &lt;code&gt;BCryptPasswordEncoder&lt;/code&gt; como nosso método de criptografia, vamos escrever &lt;code&gt;return new BCryptPasswordEncoder&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28sruolc2mvsh96jok8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28sruolc2mvsh96jok8c.png" alt=" " width="404" height="109"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora iremos definir o login e senha que será aceito para a autenticação. Para isso criaremos um metódo bean chamado &lt;code&gt;UserDetailsService&lt;/code&gt; com o tipo de retorno &lt;code&gt;UserDetailsService&lt;/code&gt;, dentro do método, criaremos o usuario com &lt;code&gt;UserDetails user = User.withUsername("user")&lt;/code&gt; 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: &lt;code&gt;.roles("USER")&lt;/code&gt;. No final, vamos dar &lt;code&gt;.build();&lt;/code&gt; para terminarmos de construir o usuário.&lt;br&gt;
Agora criaremos um &lt;code&gt;InMemoryUserDetailsManager&lt;/code&gt; no return e vamos passar o &lt;code&gt;user&lt;/code&gt;como argumento, fazendo com que o usuário seja guardado na memória.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq5i03ktdskg0qkaj0z8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq5i03ktdskg0qkaj0z8.png" alt=" " width="611" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com isso, terminamos nossa classe de configuração do Spring Security, agora precisamos de uma requisição básica para testar a autenticação.&lt;/p&gt;
&lt;h1&gt;
  
  
  Criando o controller e fazendo a requisição
&lt;/h1&gt;

&lt;p&gt;Para fazermos nossa primeira requisição, temos que criar um &lt;code&gt;endpoint&lt;/code&gt;, 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 &lt;code&gt;@RestController&lt;/code&gt;. Mais abaixo criaremos nossa endpoint com anotação &lt;code&gt;@GetMapping&lt;/code&gt; seguido da url, que vai ser ("/test") e o resto do método:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="o"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Authenticated"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqnx5dw03nvnetuqdi6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqnx5dw03nvnetuqdi6m.png" alt=" " width="338" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos abrir o postman e fazer uma requisição Get, como escolhi &lt;code&gt;("/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 erro&lt;/code&gt;401 Unauthorized` porque não fizemos nossa autenticação ainda. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcl9s5kotllnke4v0q01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhcl9s5kotllnke4v0q01.png" alt=" " width="711" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Abaixo da URL da requisição, apertaremos em Authorization, tenha certeza que em &lt;code&gt;Auth Type&lt;/code&gt;, 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.&lt;/p&gt;

&lt;p&gt;Fazendo o login e apertando em Send de novo, a requisição é feita com sucesso e recebemos o código &lt;code&gt;200 OK&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tabycdkxtugg13hc37d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tabycdkxtugg13hc37d.png" alt=" " width="705" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>springsecurity</category>
    </item>
  </channel>
</rss>
