es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La seguridad de Spring inyectando null @AuthenticatedPrincipal en los controladores.

Java 11, Spring Security aquí. Tengo el siguiente punto final/método en mi @RestController:

@GetMapping("/centerPoint")
public void centerPoint(@AuthenticationPrincipal ExpiringUsernameAuthenticationToken token,
          HttpServletResponse response) throws IOException {

<p>Authentication auth = SecurityContextHolder.getContext().getAuthentication();
  if (auth == null) {
    LOGGER.warn("La instancia de autenticación actual del contexto de seguridad está nula");
    response.sendRedirect("alguna URL de redirección");
    return;
  }</p>

<p>SAMLCredential attributes = ((SAMLCredential) token.getCredentials());
  // ...código restante omitido por brevedad</p>

<p>}

Cuando establezco un punto de interrupción dentro de este método e inicio sesión en mi aplicación, token es null (lo que significa que no se inyectó correctamente como un @AuthenticatedPrincipal) sin embargo SecurityContextHolder.getContext().getAuthentication() devuelve una instancia de Authentication que parece estar completamente bien. Recibo un NPE cuando se llama a token.getCredentials() en la parte inferior.

Sé que este es un fragmento de código incompleto y estoy dispuesto a proporcionar otras partes del código de seguridad (WebSecurityConfig, etc.) sin embargo, me pregunto: ¿qué causaría que SecurityContextHolder.getContext().getAuthentication() no tenga un token para inyectar, pero sea no nulo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es posible que la anotación @AuthenticatedPrincipal no esté correctamente configurada o establecida en WebSecurityConfig. Esto podría hacer que el parámetro token no se inyecte correctamente con la información de autenticación del usuario.

    Otra posibilidad es que la información de autenticación no se haya pasado correctamente en las cabeceras o cookies de la solicitud, lo que provoca que el parámetro token sea nulo.

    También es importante asegurarse de que la clase SAMLCredential esté correctamente configurada y sea compatible con el método de autenticación utilizado.

    Sin más contexto sobre la configuración general de la aplicación y la configuración de seguridad, es difícil identificar la causa exacta del problema.

Comments are closed.