Как использовать куки в Spring Boot
Файл cookie HTTP (также известный как веб-куки , куки браузера ) — это небольшой фрагмент информации, сохраняемый сервером в браузере пользователя. Сервер устанавливает файлы cookie, возвращая ответ на запрос, сделанный браузером. Браузер сохраняет файлы cookie и отправляет их обратно со следующим запросом на тот же сервер. Файлы cookie обычно используются для управления сессиями, отслеживания пользователей и сохранения пользовательских настроек.
Файлы cookie помогают серверу запомнить клиента при нескольких запросах. Без файлов cookie сервер будет рассматривать каждый запрос как новый клиент.
В этом руководстве мы узнаем, как читать, устанавливать и удалять файлы cookie HTTP в приложении Spring Boot.
Чтение файлов cookie HTTP
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 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 остаются активными до тех пор, пока пользователь не закроет свой браузер или не очистит свои файлы 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 — это файл cookie, который отправляется на сервер только через зашифрованное соединение HTTPS. Защищенные файлы cookie не могут быть переданы на сервер через незашифрованные соединения HTTP.
Cookie cookie = new Cookie("username", "Jovan");
cookie.setMaxAge(7 * 24 * 60 * 60);
cookie.setSecure(true);
response.addCookie(cookie);
HttpOnly 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
Если область действия не указана, файл 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.