<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Spring on Car Store</title><link>https://professor-enoqueleal.github.io/tags/spring/</link><description>Recent content in Spring on Car Store</description><generator>Hugo</generator><language>pt</language><lastBuildDate>Fri, 08 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://professor-enoqueleal.github.io/tags/spring/index.xml" rel="self" type="application/rss+xml"/><item><title>LAB 10 - Melhorando a protenção do sistema com ROLEs</title><link>https://professor-enoqueleal.github.io/posts/laboratorio-10-tsw/</link><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><guid>https://professor-enoqueleal.github.io/posts/laboratorio-10-tsw/</guid><description>&lt;h2 id="-objetivo">🎯 Objetivo&lt;/h2>
&lt;p>Neste laboratório vamos substituir a implementação em memória do &lt;strong>UserDetailsService&lt;/strong> por uma implementação que carrega usuários e roles do banco de dados usando JPA. Em seguida, veremos como usar anotações de método (&lt;strong>@PreAuthorize&lt;/strong>, &lt;strong>@Secured&lt;/strong>) nos Controllers da API para restringir o acesso com base nas roles (ex: &lt;strong>ROLE_ADMIN&lt;/strong>).&lt;/p>
&lt;p>Ao final você deverá saber:&lt;/p>
&lt;ul>
&lt;li>Criar entidades JPA para &lt;strong>User&lt;/strong> e &lt;strong>Role&lt;/strong> e os repositórios correspondentes;&lt;/li>
&lt;li>Implementar um &lt;strong>UserDetailsService&lt;/strong> que carrega dados via JPA;&lt;/li>
&lt;li>Expor &lt;strong>PasswordEncoder&lt;/strong> e configurar o &lt;strong>AuthenticationManager&lt;/strong> para usar o &lt;strong>UserDetailsService&lt;/strong> JPA;&lt;/li>
&lt;li>Proteger métodos de controllers com &lt;strong>@PreAuthorize&lt;/strong> e &lt;strong>@Secured&lt;/strong> e habilitar a segurança por método;&lt;/li>
&lt;li>Popular dados iniciais (roles e usuários) e testar o acesso.&lt;/li>
&lt;/ul>
&lt;h2 id="pré-requisitos">Pré-requisitos&lt;/h2>
&lt;ul>
&lt;li>Ter completado LAB 7 (integração com banco) e LAB 8 (segurança básica);&lt;/li>
&lt;li>Projeto &lt;strong>carstore-spring-boot&lt;/strong> compilando localmente;&lt;/li>
&lt;li>H2 (ou outro banco) configurado para desenvolvimento (se usou o LAB 7, já está pronto).&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="contrato-curto">Contrato (curto)&lt;/h2>
&lt;ul>
&lt;li>Entrada: requests HTTP autenticados com username/password via login tradicional (form) ou através do fluxo já existente;&lt;/li>
&lt;li>Saída: usuários autenticados vindos do banco com roles atribuídas que definem autorização por método;&lt;/li>
&lt;li>Erros: usuário não encontrado -&amp;gt; 401; acesso negado -&amp;gt; 403;&lt;/li>
&lt;li>Critério de sucesso: endpoints anotados com &lt;strong>@PreAuthorize&lt;/strong> e &lt;strong>@Secured&lt;/strong> aceitam/negam acesso conforme roles inseridas no banco.&lt;/li>
&lt;/ul>
&lt;h2 id="panorama-das-alterações-arquivos-chave">Panorama das alterações (arquivos-chave)&lt;/h2>
&lt;ul>
&lt;li>src/main/java/br/com/carstore/model/RoleEntity.java&lt;/li>
&lt;li>src/main/java/br/com/carstore/model/UserEntity.java&lt;/li>
&lt;li>src/main/java/br/com/carstore/repository/RoleRepository.java&lt;/li>
&lt;li>src/main/java/br/com/carstore/repository/UserRepository.java&lt;/li>
&lt;li>src/main/java/br/com/carstore/service/JpaUserDetailsService.java&lt;/li>
&lt;li>src/main/java/br/com/carstore/config/SecurityConfig.java (ajustes)&lt;/li>
&lt;li>src/main/java/br/com/carstore/config/DataInitializer.java (CommandLineRunner para popular dados)&lt;/li>
&lt;li>Controllers: exemplos com &lt;strong>@PreAuthorize&lt;/strong> / &lt;strong>@Secured&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Observação: muitos projetos já possuem H2 e JPA configurados (veja LAB 7). Se faltar algo em &lt;strong>application.properties&lt;/strong>, veja a seção &amp;ldquo;Configuração&amp;rdquo; abaixo.&lt;/p></description></item><item><title>LAB 9 - Protegendo a Camada API (REST) com Spring Security e JWT</title><link>https://professor-enoqueleal.github.io/posts/laboratorio-9-tsw/</link><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><guid>https://professor-enoqueleal.github.io/posts/laboratorio-9-tsw/</guid><description>&lt;h2 id="-objetivo">🔒 Objetivo&lt;/h2>
&lt;p>Neste laboratório, iremos configurar o Spring Security para proteger a camada de API da aplicação &lt;code>carstore-spring-boot&lt;/code>. Ao contrário da camada web (LAB 8), a API será &lt;strong>stateless&lt;/strong> (sem sessão) e usará o protocolo de autenticação &lt;strong>JWT (JSON Web Tokens)&lt;/strong>.&lt;/p>
&lt;p>Ao final deste laboratório, você deverá saber:&lt;/p>
&lt;ul>
&lt;li>Configurar o Spring Security para um fluxo &lt;strong>stateless&lt;/strong> (sem sessão).&lt;/li>
&lt;li>Criar um &lt;strong>Endpoint de Autenticação&lt;/strong> (&lt;code>/api/auth/login&lt;/code>) que retorna um JWT.&lt;/li>
&lt;li>Implementar um &lt;strong>Filtro de Autorização JWT&lt;/strong> para validar tokens em todas as requisições da API.&lt;/li>
&lt;li>Proteger rotas específicas da API (ex: &lt;code>/api/admin/**&lt;/code>).&lt;/li>
&lt;li>Testar a autenticação de API usando ferramentas como Postman.&lt;/li>
&lt;/ul>
&lt;h2 id="pré-requisitos">Pré-requisitos&lt;/h2>
&lt;ul>
&lt;li>Ter completado os laboratórios anteriores (LAB 7 e LAB 8).&lt;/li>
&lt;li>Projeto &lt;code>carstore-spring-boot&lt;/code> compilando localmente.&lt;/li>
&lt;li>Ferramenta para testar APIs (Postman).&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="parte-a-configurando-a-camada-de-api-stateless">Parte A: Configurando a Camada de API (Stateless)&lt;/h2>
&lt;h3 id="tarefa-1-dependências-adicionais">Tarefa 1: Dependências Adicionais&lt;/h3>
&lt;p>Adicione a dependência do JWT no &lt;code>pom.xml&lt;/code> da aplicação:&lt;/p></description></item><item><title>LAB 8 - Implementando a funcionalidade de Login com Spring Security</title><link>https://professor-enoqueleal.github.io/posts/laboratorio-8-tsw/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://professor-enoqueleal.github.io/posts/laboratorio-8-tsw/</guid><description>&lt;h2 id="objetivo">Objetivo&lt;/h2>
&lt;p>Neste laboratório iremos implementar a funcionalidade de autenticação pora os formulários da camada web da aplicação &lt;code>carstore-spring-boot&lt;/code>. Para isso, iremos utilizar o Spring Security Starter. O foco é permitir que usuários façam login via uma página HTML (Thymeleaf) e que a sessão seja mantida pelo container de sessão do Spring Security.&lt;/p>
&lt;p>Ao final você deverá saber:&lt;/p>
&lt;ul>
&lt;li>Incluir dependências do Spring Security no &lt;code>pom.xml&lt;/code>;&lt;/li>
&lt;li>Configurar um &lt;code>SecurityConfig&lt;/code> moderno (filter chain) com &lt;code>PasswordEncoder&lt;/code>;&lt;/li>
&lt;li>Criar um formulário de login com Thymeleaf e integrar ao fluxo do Spring Security;&lt;/li>
&lt;li>Fornecer um usuário em memória para testes;&lt;/li>
&lt;li>Testar a autenticação via navegador usando a UI e o console H2.&lt;/li>
&lt;/ul>
&lt;h2 id="pré-requisitos">Pré-requisitos&lt;/h2>
&lt;ul>
&lt;li>Ter completado os laboratórios anteriores (Parte 1 JDBC e Parte 2 JPA);&lt;/li>
&lt;li>Projeto &lt;code>carstore-spring-boot&lt;/code> compilando localmente;&lt;/li>
&lt;li>IDE (IntelliJ/VS Code) com Maven e JDK 11+ configurados.&lt;/li>
&lt;/ul>
&lt;h2 id="visão-geral-das-tarefas">Visão geral das tarefas&lt;/h2>
&lt;ol>
&lt;li>Adicionar dependência &lt;code>spring-boot-starter-security&lt;/code> no &lt;code>pom.xml&lt;/code>.&lt;/li>
&lt;li>Criar &lt;code>SecurityConfig&lt;/code> com &lt;code>SecurityFilterChain&lt;/code> e &lt;code>PasswordEncoder&lt;/code> (BCrypt).&lt;/li>
&lt;li>Criar um template &lt;code>login.html&lt;/code> e roteador &lt;code>LoginController&lt;/code>.&lt;/li>
&lt;li>Testar com um usuário em memória.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 id="tarefa-1-importando-a-dependência-do-spring-security">Tarefa 1: Importando a dependência do Spring Security&lt;/h3>
&lt;p>No &lt;code>pom.xml&lt;/code> do projeto &lt;code>carstore-spring-boot&lt;/code>, adicione os starters &lt;code>spring-boot-starter-security&lt;/code> e &lt;code>thymeleaf-extras-springsecurity6&lt;/code>:&lt;/p></description></item><item><title>LAB 7 - Integração com banco de dados via JDBC - PARTE 1</title><link>https://professor-enoqueleal.github.io/posts/laboratorio-7-tsw-part-1/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><guid>https://professor-enoqueleal.github.io/posts/laboratorio-7-tsw-part-1/</guid><description>&lt;h2 id="visão-geral-e-objetivos-do-laboratório">Visão geral e objetivos do laboratório&lt;/h2>
&lt;p>Neste laboratório vamos adicionar e configurar a persistência na nossa aplicação spring-boot (&lt;code>carstore-spring-boot&lt;/code>). O objetivo é apresentar duas abordagens comuns para trabalhar com bancos relacionais em aplicações Spring:&lt;/p>
&lt;ul>
&lt;li>Uso direto de JDBC com &lt;code>JdbcTemplate&lt;/code> (menos boilerplate que DriverManager);&lt;/li>
&lt;li>Uso de JPA (Jakarta Persistence / Hibernate) diretamente via &lt;code>EntityManager&lt;/code> (nesta aula não usaremos repositórios automáticos; focaremos em JPA puro).&lt;/li>
&lt;/ul>
&lt;p>Ao final desse laboratório você deverá ser capaz de:&lt;/p></description></item><item><title>LAB 5 – Melhorando a interface com Bootstrap (WebJars)</title><link>https://professor-enoqueleal.github.io/posts/laboratorio-5-tsw/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://professor-enoqueleal.github.io/posts/laboratorio-5-tsw/</guid><description>&lt;h2 id="-visão-geral-e-objetivos-do-laboratório">🎯 Visão geral e objetivos do laboratório&lt;/h2>
&lt;p>Neste laboratório, vamos adicionar o &lt;strong>Bootstrap&lt;/strong> ao projeto &lt;strong>CarStore&lt;/strong>, utilizando o &lt;strong>WebJars&lt;/strong>.&lt;/p>
&lt;p>O objetivo é melhorar a &lt;strong>interface visual&lt;/strong> da aplicação, deixando as telas mais bonitas e responsivas sem precisar escrever todo o CSS manualmente.&lt;/p>
&lt;h2 id="pré-requisitos">Pré-requisitos&lt;/h2>
&lt;ul>
&lt;li>Java 17 ou superior&lt;/li>
&lt;li>Maven&lt;/li>
&lt;li>Uma IDE (IntelliJ, VS Code, Eclipse, etc.)&lt;/li>
&lt;li>Projeto do Laboratório 4 concluído&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-o-que-é-o-webjar">📝 O que é o WebJar?&lt;/h2>
&lt;p>Um WebJar é uma forma de empacotar bibliotecas web (como Bootstrap, jQuery ou FontAwesome) em arquivos JAR, que podem ser gerenciados pelo Maven/Gradle.&lt;br>
Isso facilita a importação e o versionamento das dependências, evitando que precisemos baixar manualmente os arquivos de CSS e JavaScript.&lt;/p></description></item><item><title>LAB 4 - Controllers e Views com Thymeleaf no Spring Boot</title><link>https://professor-enoqueleal.github.io/posts/laboratorio-4-tsw/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><guid>https://professor-enoqueleal.github.io/posts/laboratorio-4-tsw/</guid><description>&lt;h2 id="visão-geral-e-objetivos-do-laboratório">Visão geral e objetivos do laboratório&lt;/h2>
&lt;p>Neste laboratório, você vai aprender como criar controllers para processar dados e páginas dinâmicas usando Thymeleaf em uma aplicação Spring Boot. O objetivo é dar continuidade ao sistema de cadastro de carros, permitindo cadastrar e listar carros em páginas web.&lt;/p>
&lt;h2 id="pré-requisitos">Pré-requisitos&lt;/h2>
&lt;ul>
&lt;li>Java 17 ou superior&lt;/li>
&lt;li>Maven&lt;/li>
&lt;li>Uma IDE (IntelliJ, VS Code, Eclipse, etc.)&lt;/li>
&lt;li>Projeto do Laboratório 3 concluído&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="tarefa-1-estrutura-do-projeto">Tarefa 1: Estrutura do Projeto&lt;/h2>
&lt;p>Certifique-se de que seu projeto possui as dependências do Spring Boot, Thymeleaf e Bean Validation, conforme os laboratórios anteriores. O diretório de templates deve estar em &lt;code>src/main/resources/templates&lt;/code>.&lt;/p></description></item></channel></rss>