Как использовать куки в Spring Boot

Файл cookie HTTP (также известный как веб-куки , куки браузера ) — это небольшой фрагмент информации, сохраняемый сервером в браузере пользователя. Сервер устанавливает файлы cookie, возвращая ответ на запрос, сделанный браузером. Браузер сохраняет файлы cookie и отправляет их обратно со следующим запросом на тот же сервер. Файлы cookie обычно используются для управления сессиями, отслеживания пользователей и сохранения пользовательских настроек.

Файлы cookie помогают серверу запомнить клиента при нескольких запросах. Без файлов cookie сервер будет рассматривать каждый запрос как новый клиент.

В этом руководстве мы узнаем, как читать, устанавливать и удалять файлы cookie HTTP в приложении Spring Boot.

Spring Framework предоставляет @CookieValue аннотацию, чтобы получить значение любого файла cookie HTTP без повторения всех файлов cookie, полученных из запроса. Эту аннотацию можно использовать для сопоставления значения файла cookie с параметром метода контроллера.

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

В приведенном выше фрагменте кода обратите внимание на defaultValue = "Atta". Если значение по умолчанию не установлено, Spring выдаст java.lang.IllegalStateException исключение при невозможности найти файл cookie с именем username в HTTP-запросе.

Чтобы установить cookie в Spring Boot, мы можем использовать HttpServletResponse метод класса addCookie(). Все, что вам нужно сделать, это создать новый экземпляр Cookie class и добавьте его в ответ.

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

    
    response.addCookie(cookie);

    return "Username is changed!";
}

Чтение всех файлов cookie

Вместо использования @CookieValue аннотацию, мы также можем использовать HttpServletRequest class в качестве параметра метода контроллера для чтения всех файлов cookie. Этот класс предоставляет getCookies() метод, который возвращает все файлы cookie, отправленные браузером, в виде массива 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";
}

Если для файла cookie не указано время истечения срока действия, он сохраняется до тех пор, пока не истек срок действия сеанса. Такие файлы cookie, как называется сеансовые куки. Сеансовые файлы cookie остаются активными до тех пор, пока пользователь не закроет свой браузер или не очистит свои файлы cookie. username cookie, созданный выше, на самом деле является сеансовым cookie.

Но вы можете переопределить это поведение по умолчанию и установить время истечения срока действия файла cookie, используя setMaxAge() метод Cookie учебный класс.


Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); 


response.addCookie(cookie);

Теперь вместо истечения срока действия при закрытии браузера username cookie будет оставаться активным в течение следующих 7 дней. Такие файлы cookie, срок действия которых истекает в указанную дату и время, называются постоянные файлы cookie.

Срок годности истек setMaxAge() метод в секундах. Дата и время истечения срока действия относятся к клиенту, где устанавливается файл cookie, а не к серверу.

Безопасный файл cookie — это файл cookie, который отправляется на сервер только через зашифрованное соединение HTTPS. Защищенные файлы cookie не могут быть переданы на сервер через незашифрованные соединения HTTP.


Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); 
cookie.setSecure(true);


response.addCookie(cookie);

Файлы cookie HttpOnly используются для предотвращения атак с использованием межсайтовых сценариев (XSS) и недоступны через JavaScript. Document.cookie API. Когда HttpOnly флаг установлен для файла cookie, он сообщает браузеру, что доступ к этому конкретному файлу cookie должен иметь только сервер.


Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); 
cookie.setSecure(true);
cookie.setHttpOnly(true);


response.addCookie(cookie);

Если область действия не указана, файл cookie отправляется на сервер только для пути, который использовался для его установки в браузере. Мы можем изменить это поведение, используя setPath() метод Cookie учебный класс. Это устанавливает Path директива для файла cookie.


Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60); 
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setPath("/"); 


response.addCookie(cookie);

Чтобы удалить файл cookie, установите Max-Age директива 0 и сбросьте его значение. Ты должен также передайте те же другие свойства файла cookie, которые вы использовали для его установки. Не устанавливайте Max-Age директивное значение для -1. В противном случае он будет рассматриваться браузером как файл cookie сеанса.


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


response.addCookie(cookie);

Исходный код: Загрузите полный исходный код с Гитхаб доступен по лицензии MIT.

Резюме

Файлы cookie обеспечивают способ обмена информацией между сервером и браузером для управления сеансами (логины, корзины покупок, результаты игр), запоминания пользовательских предпочтений (темы, принятие политики конфиденциальности) и отслеживания поведения пользователя на сайте.

Spring Boot предоставляет простой способ чтения, записи и удаления файлов cookie HTTP.

  • @CookieValue аннотация сопоставляет значение файла cookie с параметром метода. Вы должны установить значение по умолчанию, чтобы избежать исключения во время выполнения, когда файл cookie недоступен.
  • HttpServletResponse class можно использовать для установки нового файла cookie в браузере. Вам просто нужно создать экземпляр Cookie class и добавьте его в ответ.
  • Чтобы прочитать все файлы cookie, вы можете использовать HttpServletRequestх getCookies() метод, который возвращает массив Cookie.
  • Max-Age директива указывает дату и время, когда срок действия файла cookie должен истечь.
  • Если вы храните конфиденциальную информацию в файле cookie, обязательно установите Secure а также HttpOnly флаги, чтобы избежать XSS-атак.
  • Установить Path=/ сделать cookie доступным везде для текущего домена.
  • Чтобы удалить файл cookie, установите Max-Age к 0 и передайте все свойства, которые вы использовали для его установки.

Вот и все, кто использует файлы cookie в приложении Spring Boot. Если у вас есть какие-либо вопросы или отзывы, пожалуйста, не стесняйтесь, присылайте мне твит в любой момент.

Удачного кодирования 😍


🙋‍♂️ Понравилась статья? Подпишитесь на @attacomsian в Твиттере. Вы также можете подписаться на меня в LinkedIn а также РАЗРАБОТКА.


Этот пост изначально был опубликован на attacomsian.com/blog.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *