Cómo usar cookies en Spring Boot

Una cookie HTTP (también conocida como galleta web , cookie del navegador ) es una pequeña pieza de información almacenada por el servidor en el navegador del usuario. El servidor establece las cookies mientras devuelve la respuesta a una solicitud realizada por el navegador. El navegador almacena las cookies y las envía de vuelta con la próxima solicitud al mismo servidor. Las cookies se utilizan generalmente para la gestión de sesiones, el seguimiento de usuarios y para almacenar las preferencias de los usuarios.

Las cookies ayudan al servidor a recordar al cliente a través de múltiples solicitudes. Sin cookies, el servidor trataría cada solicitud como un nuevo cliente.

En este tutorial, aprenderemos a leer, configurar y eliminar cookies HTTP en una aplicación Spring Boot.

Spring framework proporciona @CookieValue anotación para obtener el valor de cualquier cookie HTTP sin iterar sobre todas las cookies obtenidas de la solicitud. Esta anotación se puede usar para asignar el valor de una cookie al parámetro del método del controlador.

@GetMapping("/")
public String readCookie(@CookieValue(value = "username", defaultValue = "Atta") String username) {
    return "Hey! My username is " + username;
}

En el fragmento de código anterior, observe el defaultValue = "Atta". Si no se establece el valor predeterminado, Spring lanzará un java.lang.IllegalStateException excepción al no encontrar la cookie con nombre username en la solicitud HTTP.

Para configurar una cookie en Spring Boot, podemos usar HttpServletResponse método de clase addCookie(). Todo lo que necesita hacer es crear una nueva instancia de Cookie class y agréguelo a la respuesta.

@GetMapping("/change-username")
public String setCookie(HttpServletResponse response) {
    // create a cookie
    Cookie cookie = new Cookie("username", "Jovan");

    //add cookie to response
    response.addCookie(cookie);

    return "Username is changed!";
}

Lectura de todas las cookies

En lugar de usar @CookieValue anotación, también podemos usar HttpServletRequest class como parámetro del método del controlador para leer todas las cookies. Esta clase proporciona getCookies() método que devuelve todas las cookies enviadas por el navegador como una matriz de Cookie.

@GetMapping("/all-cookies")
public String readAllCookies(HttpServletRequest request) {

    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        return Arrays.stream(cookies)
                .map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));
    }

    return "No cookies";
}

Si no se especifica un tiempo de caducidad para una cookie, dura mientras la sesión no haya caducado. Tales cookies como las llamadas cookies de sesión. Las cookies de sesión permanecen activas hasta que el usuario cierra su navegador o borra sus cookies. los username La cookie creada anteriormente es, de hecho, una cookie de sesión.

Pero puede anular este comportamiento predeterminado y establecer el tiempo de caducidad de la cookie usando setMaxAge() método de Cookie clase.

// create a cookie
Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days

//add cookie to response
response.addCookie(cookie);

Ahora, en lugar de caducar cuando se cierra el navegador, el username La cookie permanecerá activa durante los próximos 7 días. Estas cookies, que caducan en una fecha y hora determinadas, se denominan galletas permanentes.

El tiempo de caducidad pasó a setMaxAge() El método es en segundos. La fecha y la hora de caducidad son relativas al cliente en el que se establece la cookie, no al servidor.

Una cookie segura es aquella que solo se envía al servidor a través de una conexión HTTPS cifrada. Las cookies seguras no se pueden transmitir al servidor a través de conexiones HTTP sin cifrar.

// create a cookie
Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days
cookie.setSecure(true);

//add cookie to response
response.addCookie(cookie);

Las cookies HttpOnly se utilizan para evitar ataques de secuencias de comandos entre sitios (XSS) y no son accesibles a través de JavaScript. Document.cookie API. Cuando HttpOnly está establecida para una cookie, le dice al navegador que solo el servidor debe acceder a esta cookie en particular.

// create a cookie
Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days
cookie.setSecure(true);
cookie.setHttpOnly(true);

//add cookie to response
response.addCookie(cookie);

Si no se especifica el alcance, una cookie solo se envía al servidor para una ruta que se usó para establecerla en el navegador. Podemos cambiar este comportamiento usando setPath() método de Cookie clase. Esto establece el Path directiva para la cookie.

// create a cookie
Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); // expires in 7 days
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setPath("/"); // global cookie accessible every where

//add cookie to response
response.addCookie(cookie);

Para eliminar una cookie, configure el Max-Age directiva a 0 y anular su valor. Tú deber también pasa las mismas otras propiedades de cookies que usó para configurarlo. No establezca el Max-Age valor de la directiva a -1. De lo contrario, el navegador la tratará como una cookie de sesión.

// create a cookie
Cookie cookie = new Cookie("username", null);
cookie.setMaxAge(0);
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setPath("/");

//add cookie to response
response.addCookie(cookie);

Código fuente: Descarga el código fuente completo de GitHub disponible bajo licencia MIT.

Resumen

Las cookies brindan una forma de intercambiar información entre el servidor y el navegador para administrar sesiones (inicios de sesión, carritos de compras, puntajes de juegos), recordar las preferencias del usuario (temas, aceptación de la política de privacidad) y rastrear el comportamiento del usuario en el sitio.

Spring Boot proporciona una manera fácil de leer, escribir y eliminar cookies HTTP.

  • @CookieValue La anotación asigna el valor de la cookie al parámetro del método. Debe establecer el valor predeterminado para evitar la excepción de tiempo de ejecución cuando la cookie no está disponible.
  • HttpServletResponse La clase se puede utilizar para establecer una nueva cookie en el navegador. Solo necesitas crear una instancia de Cookie class y agréguelo a la respuesta.
  • Para leer todas las cookies, puede utilizar HttpServletRequest‘s getCookies() método que devuelve una matriz de Cookie.
  • Max-Age directiva especifica la fecha y la hora, cuando la cookie debe caducar.
  • Si está almacenando información confidencial en una cookie, asegúrese de configurar Secure y HttpOnly banderas para evitar ataques XSS.
  • Selecciona el Path=/ para hacer que una cookie sea accesible en todas partes para el dominio actual.
  • Para eliminar una cookie, configure el Max-Age a 0 y pase todas las propiedades que usó para configurarlo.

Eso es todo amigos por usar cookies en una aplicación Spring Boot. Si tiene alguna pregunta o comentario, no dude en enviarme un Pío cualquier momento.

Codificación feliz 😍


🙋‍♂️ ¿Te gusta este artículo? Siga a @attacomsian en Twitter. También puedes seguirme en LinkedIn y DEV.


Esta publicación fue publicada originalmente en attacomsian.com/blog.

Similar Posts

Leave a Reply

Your email address will not be published.