<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Authorization on Car Store</title><link>https://professor-enoqueleal.github.io/tags/authorization/</link><description>Recent content in Authorization 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/authorization/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></channel></rss>