SpringBoot创建Cookie工具类实现Cookie的:写入、读取、删除

news2024/12/24 11:40:29

1、什么是 Cookie

Cookie 是网站服务器发送到客户端(通常是浏览器)的一小段数据,用于在客户端存储用户信息,以便在用户再次访问网站时提供更好的体验。当用户在浏览器中访问某个网站时,服务器可能会在用户的计算机上创建一个 Cookie。这个 Cookie 包含了服务器的某些信息,如用户的登录状态、个性化设置等。当用户再次访问该网站时,浏览器会自动将这些 Cookie 发送给服务器,服务器通过读取这些信息来识别用户并提供相应的服务。

1.1 Cookie 的用途

用户身份识别:通过 Cookie 可以标识和识别用户,帮助网站记住用户的登录状态和个性化设置。

购物车和购买记录:在网上购物时,Cookie 可以跟踪用户添加到购物车中的商品和购买记录,确保购物过程的连续性和方便性。

网站分析和统计:网站使用 Cookie 来收集匿名的用户访问数据,如访问次数、页面浏览量、用户行为等,以用于网站的分析和优化。

广告定向:一些广告商使用 Cookie 来跟踪用户在网上的活动,从而投放更加相关和个性化的广告。

网站功能优化:Cookies 还可以用于网站功能的优化,例如记住用户选择的语言、地区等。

1.2 安全性与隐私

安全性:Cookie 本身并不包含病毒或恶意软件,但它们可以被用于跟踪用户的在线活动,从而可能引发隐私泄露的风险。因此,使用 Cookie 时需要谨慎处理用户数据,并遵守相关的隐私政策和法律法规。

隐私保护:为了保护用户的隐私,许多浏览器都提供了清除 Cookie 的功能。用户可以随时选择删除计算机上的 Cookie,以避免个人信息被泄露或滥用。 

2、创建 Cookie 工具类

在 SpringBoot 项目中,后端需要经常操作 Cookie 对象,所有创建 Cookie 工具类可以提高开发效率。

创建  CookieUtil 类(Cookie公共方法类):

package com.pjb.ems.util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Cookie公共方法类
 * @author pan_junbiao
 **/
public class CookieUtil
{
    /**
     * 写入 Cookie 对象
     * 过期时间(单位为秒):-1:负数永不过期;0:则立马过期
     */
    public static void writeCookie(String name, String value, int maxAge, HttpServletResponse response)
    {
        Cookie cookie = new Cookie(name, value);
        cookie.setMaxAge(maxAge);      // 设置过期时间(单位为秒)
        cookie.setDomain("127.0.0.1"); // 设置域名,实现跨域功能
        cookie.setPath("/");
        response.addCookie(cookie);
    }

    /**
     * 读取 Cookie 的值
     */
    public static String readCookie(String name, HttpServletRequest request)
    {
        String value = null;
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0)
        {
            for (Cookie cookie : cookies)
            {
                if (name.equals(cookie.getName()))
                {
                    value = cookie.getValue();
                    break;
                }
            }
        }
        return value;
    }

    /**
     * 删除 Cookie 对象
     */
    public static void deleteCookie(String name, HttpServletRequest request, HttpServletResponse response)
    {
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0)
        {
            for (Cookie cookie : cookies)
            {
                if (name.equals(cookie.getName()))
                {
                    cookie.setMaxAge(0); // 设置有效时间为0秒的时候:创建完cookie后,则立马过期(删除);
                    cookie.setPath("/");
                    response.addCookie(cookie);
                }
            }
        }
    }
}

3、知识补充

在 SpringBoot 项目中,后端如何获取 HttpServletRequest、HttpServletResponse 和 HttpSession 对象?

 SpringBoot 如何获取 HttpServletRequest、HttpServletResponse 和 HttpSession 对象:

详细方法,请求点击浏览文章:《SpringMVC获取HttpServletRequest、HttpServletResponse和HttpSession对象的3种方法》

后端代码,可以通过ServletRequestAttributes对象。

/**
 * 获取信息
 *
 * @author pan_junbiao
 */
@RequestMapping(value = "/getInfo")
public void getInfo()
{
    //获取ServletRequestAttributes对象
    ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
 
    //获取HttpServletRequest对象
    HttpServletRequest request = servletRequestAttributes.getRequest();
 
    //获取HttpServletResponse对象
    HttpServletResponse response = servletRequestAttributes.getResponse();
 
    //获取HttpSession对象
    HttpSession session = servletRequestAttributes.getRequest().getSession();
 
    //忽略其他代码...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2240656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 使用 STM32CubeMX HAL库实现低功耗模式

STM32 使用 HAL 库的低功耗模式测试使用 ...... 矜辰所致前言 上次画了一个 STM32L010F4 最小系统的板子,也做了一些基本测试,但是最重要的低功耗一直拖到现在,以前在使用 STM32L151 的时候用标准库做过低功耗的项目,现在都使…

接口自动化代码编写规范

命名规范 文件命名:测试文件应该以 test_ 开头,以 _test.py 结尾,例如:test_my_module_test.py。 函数命名:测试函数应该以 test_ 开头,描述清楚被测试的功能或行为,使用下划线分隔单词&#…

ESLint 使用教程(四):ESLint 有哪些执行时机?

前言 ESLint 作为一个静态代码分析工具,可以帮助我们发现和修复代码中的问题,保持代码风格的一致性。然而,ESLint的最佳实践不仅仅在于了解其功能,更在于掌握其执行时机。本文将详细介绍ESLint在不同开发阶段的执行时机&#xff…

Leetcode 存在重复元素II

这段代码的算法思想可以用以下步骤来解释: 算法思想 使用哈希表(HashMap)存储每个元素的索引: 遍历数组 nums 时,使用一个 HashMap 来记录每个元素的值和它的索引位置。这样可以快速查找之前出现过的相同元素的索引。…

1111111111待修改--大流量分析(三)-BUUCTF

总结摘要 题目来来源URL https://buuoj.cn/challenges#%E5%A4%A7%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90%EF%BC%88%E4%B8%89%EF%BC%89 答题过程 这道题是看大佬写着说查找phpinfo,我现在也不知道为什么能够一下子就定位到这里了 这里先按照phpinfo进行&#xff…

在Docker环境下为Nginx配置HTTPS

前言 配置HTTPS已经成为网站部署的必要步骤。本教程将详细介绍如何在Docker环境下为Nginx配置HTTPS,使用自签名证书来实现加密通信。虽然在生产环境中建议使用权威CA机构颁发的证书,但在开发测试或内网环境中,自签名证书是一个很好的选择。 …

Python →爬虫实践

爬取研究中心的书目 现在&#xff0c;想要把如下网站中的书目信息爬取出来。 案例一 耶鲁 Publications | Yale Law School 分析网页&#xff0c;如下图所示&#xff0c;需要爬取的页面&#xff0c;标签信息是“<p>”&#xff0c;所以用 itemssoup.find_all("p&…

expo5.2运行web报错Cannot find module ‘react‘

修改app.json中的web output 配置为 ‘single’ 可以解决 expo run web 这个错误问题 "web": {"bundler": "metro","output": "single","favicon": "./assets/images/favicon.png"},相关链接&#xff1…

信号保存和信号处理

目录 信号保存中重要的概念 内核中信号的保存 对sigset_t操作的函数 对block&#xff0c;pendding&#xff0c;handler三张表的操作 sigpromask ​编辑 sigpending 是否有sighandler函数呢&#xff1f; 案例 信号处理 操作系统是如何运行的&#xff1f; 硬件中断 …

C#从入门到放弃

C#和.NET的区别 C# C#是一个编程语言 .NET .NET是一个在window下创建程序的框架 .NET框架不仅局限于C#,它还可以支持很多语言 .NET包括了2个组件&#xff0c;一个叫CLR(通用语言运行时)&#xff0c;另一个是用来构建程序的类库 CLR 用C写一个程序&#xff0c;在一台8688的机器…

STM32 HAL 矩阵按键(轮询方式)

1、简介 最近准备做个门禁系统,首先通过4x4矩阵按键实现密码的设定,查看网上资料完成了4x4矩阵按键的初步使用,整理一个傻瓜式操作方便后续的使用与复习。 2、实物图 3、STM32CubeMX配置 4、KEY.C /******************************************************************…

linux网络编程9——无锁队列

文章目录 无锁队列1. 无锁队列原理1.1 多线程并发控制策略介绍1.2 无锁队列概念1.3 无锁队列的分类1.3.1 以生产者消费者数量划分1.3.2 以底层数据结构划分1.3.3 侵入式与非侵入式链表队列 1.4 无锁队列应用场景 2. 无锁队列的实现2.1 MPSCQueue2.2 rte_ring 学习参考 无锁队列…

【电子设计】按键LED控制与FreeRTOS

1. 安装Keilv5 打开野火资料,寻找软件包 解压后得到的信息 百度网盘 请输入提取码 提取码:gfpp 安装526或者533版本都可以 下载需要的 F1、F4、F7、H7 名字的 DFP pack 芯片包 安装完 keil 后直接双击安装 注册操作,解压注册文件夹后根据里面的图示步骤操作 打开说明 STM…

(四)P2Link内置HTTP服务,分享本地文件

P2Link可快速为本地文件目录提供公网HTTP服务地址&#xff0c;用于远程浏览和下载本地文件&#xff0c;类似于nginx等服务器软件的静态资源功能。 相较于前两篇&#xff0c;Windows连接P2Link的WebDAV服务和Windows连接P2Link的FTP服务中描述的方案&#xff0c;通过HTTP分享文件…

Charles抓https包-配置系统证书(雷电)

1、导出证书 2、下载 主页上传资源中有安装包&#xff0c;免费的 openssl 安装教程自己搜 openssl x509 -subject_hash_old -in charles.pem 3、修改证书名、后缀改成点0 雷电打开root和磁盘写入 4、导入雷电证书根目录 证书拖进去&#xff0c;基本就完成了&#xff…

认证鉴权框架SpringSecurity-1--概念和原理篇

1、基本概念 Spring Security 是一个强大且高度可定制的框架&#xff0c;用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分&#xff0c;提供了全面的安全解决方案&#xff0c;包括认证、授权、CSRF防护、会话管理等功能。 2、认证、授权和鉴权 &#xff08;1&am…

动态规划一>子数组系列

题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int maxSubArray(int[] nums) {int n nums.length;int[] dp new int[n 1];int ret Integer.MIN_VALUE;for(int i 1; i < n; i){dp[i] Math.max(nums[i - 1], dp[i - 1] nums[i - 1]);ret Math.max(…

ctfshow DSBCTF web部分wp

ctfshow 单身杯 web部分wp web 签到好玩的PHP 源码&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);class ctfshow {private $d ;private $s ;private $b ;private $ctf ;public function __destruct() {$this->d (string)$this->d;$this…

【How AI Works】读书笔记2 出发吧! AI纵览 第一部分

目录 1.说明 2.第一部分(P5~P8) 如何控制几乎所有计算机的方式 三个计算机的先驱人物 AI,机器学习和深度学习之间的关系 机器学习的介绍 深度学习的介绍 AI的介绍 模型 3.单词 4.专业术语 1.说明 书全名:How AI Works From Sorcery to Science 作者 Ronald T.Kneus…

MQ集群

目录 MQ集群 集群分类 普通集群 集群结构和特征 集群的部署 获取cookie 准备集群配置 启动集群 镜像模式 镜像模式的特征 镜像模式的配置 exactly模式 仲裁队列 集群特征仲裁队列&#xff1a;仲裁队列是3.8版本以后才有的新功能&#xff0c;用来替代镜像队列&#…