From be48853e0e1a06549204e34436b27ff8a0f22269 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 21 May 2026 15:28:50 -0400 Subject: [PATCH] Integra panel admin en seguridad y corrige carga de usuarios con JWT2 --- .../configuration/SecurityConfig.java | 1 + .../configuration/SpaPanelConfig.java | 31 +++++++++++++++++++ .../fercoganbackend/entity/Usuario.java | 2 ++ .../service/UsuarioDetailsService.java | 10 ++++-- src/main/resources/static/panel/.gitkeep | 0 5 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/example/fercoganbackend/configuration/SpaPanelConfig.java create mode 100644 src/main/resources/static/panel/.gitkeep diff --git a/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java b/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java index afcb06d..9e222d5 100644 --- a/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java +++ b/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java @@ -49,6 +49,7 @@ public class SecurityConfig { .requestMatchers(HttpMethod.POST, "/api/usuarios/registrar").permitAll() .requestMatchers("/api/usuarios/**").permitAll() .requestMatchers("/favicon.ico", "/error", "/static/**", "/contador/**").permitAll() + .requestMatchers("/panel", "/panel/**").permitAll() .requestMatchers("/admin/**").hasAuthority("ADMIN") .anyRequest().authenticated() ) diff --git a/src/main/java/com/example/fercoganbackend/configuration/SpaPanelConfig.java b/src/main/java/com/example/fercoganbackend/configuration/SpaPanelConfig.java new file mode 100644 index 0000000..96c3f5a --- /dev/null +++ b/src/main/java/com/example/fercoganbackend/configuration/SpaPanelConfig.java @@ -0,0 +1,31 @@ +package com.example.fercoganbackend.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.resource.PathResourceResolver; + +import java.io.IOException; + +@Configuration +public class SpaPanelConfig implements WebMvcConfigurer { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/panel/**") + .addResourceLocations("classpath:/static/panel/") + .resourceChain(true) + .addResolver(new PathResourceResolver() { + @Override + protected Resource getResource(String resourcePath, Resource location) throws IOException { + Resource requested = location.createRelative(resourcePath); + if (requested.exists() && requested.isReadable()) { + return requested; + } + return new ClassPathResource("/static/panel/index.html"); + } + }); + } +} diff --git a/src/main/java/com/example/fercoganbackend/entity/Usuario.java b/src/main/java/com/example/fercoganbackend/entity/Usuario.java index 44efd1e..6851e24 100644 --- a/src/main/java/com/example/fercoganbackend/entity/Usuario.java +++ b/src/main/java/com/example/fercoganbackend/entity/Usuario.java @@ -1,5 +1,6 @@ package com.example.fercoganbackend.entity; +import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.persistence.*; import java.util.Set; @@ -10,6 +11,7 @@ public class Usuario { private Long id; private String username; + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password; @Column(nullable = false) diff --git a/src/main/java/com/example/fercoganbackend/service/UsuarioDetailsService.java b/src/main/java/com/example/fercoganbackend/service/UsuarioDetailsService.java index 29c4f2c..3c7d73d 100644 --- a/src/main/java/com/example/fercoganbackend/service/UsuarioDetailsService.java +++ b/src/main/java/com/example/fercoganbackend/service/UsuarioDetailsService.java @@ -38,13 +38,17 @@ public class UsuarioDetailsService implements UserDetailsService { logger.info("Usuario encontrado: {}, aprobado: {}", usuario.getUsername(), usuario.isAprobado()); logger.info("Roles del usuario: {}", usuario.getRoles()); + var authorities = usuario.getRoles() == null + ? List.of() + : usuario.getRoles().stream() + .map(r -> new SimpleGrantedAuthority(r.name())) + .toList(); + return new org.springframework.security.core.userdetails.User( usuario.getUsername(), usuario.getPassword(), usuario.isAprobado(), true, true, true, - usuario.getRoles().stream() - .map(r -> new SimpleGrantedAuthority(r.name())) - .toList() + authorities ); } } diff --git a/src/main/resources/static/panel/.gitkeep b/src/main/resources/static/panel/.gitkeep new file mode 100644 index 0000000..e69de29