Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

No puedo arrancar Tomcat

Hola, necesito ayuda, no puedo arrancar Tomcat, me da el siguiente error:

Error starting Tomcat context. 
Exception: org.springframework.beans.factory.
UnsatisfiedDependencyException. 
Message: Error creating bean with name 'securityFilter':
Unsatisfied dependency expressed through field 'usuarioRepository': 
Error creating bean with name 'usuarioRepository' defined in med.voll.api.domain.usuarios.UsuarioRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: 
Cannot resolve reference to bean 'jpaSharedEM_entityManagerFactory' while setting bean property 'entityManager'

he buscado en mi codigo pero no encuentro error.

securityFilter :

package med.voll.api.infra.security;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import med.voll.api.domain.usuarios.UsuarioRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UserDetailsRepositoryReactiveAuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import java.io.IOException;

@Component
public class SecurityFilter extends OncePerRequestFilter {

    @Autowired
    private TokenService tokenService;
    @Autowired
    private UsuarioRepository usuarioRepository;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        // Obtener el token del header
        var authHeader = request.getHeader("Authorization");
        if (authHeader != null) {
            var token = authHeader.replace("Bearer ", "");
            var nombreUsuario = tokenService.getSubject(token); // extract username
            if (nombreUsuario != null) {
                // Token valido
                var usuario = usuarioRepository.findByLogin(nombreUsuario);
                var authentication = new UsernamePasswordAuthenticationToken(usuario, null,
                        usuario.getAuthorities()); // Forzamos un inicio de sesion
                SecurityContextHolder.getContext().setAuthentication(authentication);
            }
        }
        filterChain.doFilter(request, response);
    }
}

usuarioRepository :

package med.voll.api.domain.usuarios;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.security.core.userdetails.UserDetails;

public interface UsuarioRepository extends JpaRepository<Usuario, Long> {
    UserDetails findByLogin(String username);
}

Agradezco a quien me pueda ayudar, gracias de antemanos.

3 respuestas
solución!

Volví a versión anterior y solucioné el problema, gracias de todas maneras.

Hola Gonzalo, espero que estés bien

Parece que estás enfrentando un problema relacionado con la configuración de JPA y la inyección de dependencias en tu aplicación Spring Boot. El error que mencionas indica que hay un problema al intentar crear el bean usuarioRepository, lo cual podría estar relacionado con la configuración de tu EntityManager.

Aquí hay algunas cosas que podrías verificar para intentar resolver el problema:

  1. Dependencias de JPA: Asegúrate de que tienes las dependencias correctas en tu archivo pom.xml o build.gradle para Spring Data JPA y el conector de base de datos que estás utilizando (por ejemplo, H2, MySQL, etc.).

  2. Configuración de la Base de Datos: Verifica que tu archivo application.properties o application.yml esté correctamente configurado con las propiedades de conexión a la base de datos. Asegúrate de que las credenciales y la URL de la base de datos sean correctas.

  3. Escaneo de Componentes: Asegúrate de que la anotación @EnableJpaRepositories esté configurada correctamente para escanear el paquete donde se encuentra tu UsuarioRepository. Si estás utilizando la configuración por defecto de Spring Boot, esto debería hacerse automáticamente, pero si has cambiado la estructura de paquetes, podría ser necesario configurarlo manualmente.

  4. Configuración de EntityManager: Si tienes una configuración personalizada para el EntityManager, asegúrate de que esté correctamente definida y que el bean entityManagerFactory esté disponible en el contexto de Spring.

  5. Verifica las Dependencias: A veces, las versiones incompatibles de bibliotecas pueden causar problemas. Asegúrate de que todas las dependencias estén actualizadas y sean compatibles entre sí.

Aquí tienes un ejemplo de cómo podría verse una configuración básica en application.properties para una base de datos H2:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Espero que estas sugerencias te ayuden a resolver el problema. ¡Bons estudios!

Hola Brenda, volví a versión anterior y solucioné el problema, gracias de todas maneras.