SpringBoot开发中使用Cookie

什么是cookie?

cookie就是一个小体积的键值对,格式:key=value;

为什么要使用cookie?

客户端和服务器端,通常使用http协议来进行数据传输,而http协议是无状态的。也就是客户端向同一个服务器端发送的第一次Request和第二次Request,是没有关联的。

举个例子:小明第一次向服务器发起登陆请求,如果服务器不给小明返回cookie(本文不讨论token,session等其他方式验证用户登录态),小明第二次像服务器发送请求时,服务器是无法识别本次请求是小明发起的,小明就需要再次登陆。

因此需要cookie来保存一些用户信息,每次向相同的域名(domian)和路径(path)发送Request时都会携带cookie;

SpringBoot中如何使用cookie?

1.服务端如何获取cookie?

1.1通过HttpServletRequest对象,获取cookie

 1.2接口入参使用@CookieValue注解,获取cookie的值

 该注解由SpringWeb提供,主要有两个属性,默认Required为true,如果Request不包含该名字的cookie,则会报错。

2.服务端如何向客户端返回cookie?

创建一个cookie对象,通过HttpServletResponse返回给客户端。

Cookie类和HttpServletResponse以及HttpServletRequest类都在javax.servlet.http包下。

3. Cookie类的属性

 如图:

Name和Value
Name和Value是一个键值对。Name是Cookie的名称,Cookie一旦创建,名称便不可更改,一般名称不区分大小写;Value是该名称对应的Cookie的值,如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。

Domain
Domain决定Cookie在哪个域是有效的,也就是决定在向该域发送请求时是否携带此Cookie,Domain的设置是对子域生效的,如Doamin设置为 .a.com,则b.a.com和c.a.com均可使用该Cookie,但如果设置为b.a.com,则c.a.com不可使用该Cookie。Domain参数必须以点(".")开始。

Path
Path是Cookie的有效路径,和Domain类似,也对子路径生效,如Cookie1和Cookie2的Domain均为a.com,但Path不同,Cookie1的Path为 /b/,而Cookie的Path为 /b/c/,则在a.com/b页面时只可以访问Cookie1,在a.com/b/c页面时,可访问Cookie1和Cookie2。Path属性需要使用符号“/”结尾。

Expires/Max-age
Expires和Max-age均为Cookie的有效期,Expires是该Cookie被删除时的时间戳,格式为GMT,若设置为以前的时间,则该Cookie立刻被删除,并且该时间戳是服务器时间,不是本地时间!若不设置则默认页面关闭时删除该Cookie。
Max-age也是Cookie的有效期,但它的单位为秒,即多少秒之后失效,若Max-age设置为0,则立刻失效,设置为负数,则在页面关闭时失效。Max-age默认为 -1。

HttpOnly
HttpOnly值为 true 或 false,若设置为true,则不允许通过脚本document.cookie去更改这个值,同样这个值在document.cookie中也不可见,但在发送请求时依旧会携带此Cookie。

Secure
Secure为Cookie的安全属性,若设置为true,则浏览器只会在HTTPS和SSL等安全协议中传输此Cookie,不会在不安全的HTTP协议中传输此Cookie。
 

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个简化的Java开发框架,它提供了大量的开箱即用的功能和插件,方便开发者进行快速开发。在Spring Boot项目实现登录功能,并使用Cookie记录用户信息是很常见的需求。 在Spring Boot实现登录功能,可以使用Spring Security框架来进行认证和授权的处理。可以通过编写自定义的用户认证逻辑,验证用户的登录信息,并生成相应的Cookie来记录用户会话信息。 首先,需要在Spring Boot项目的依赖添加Spring Security的相关依赖。然后,通过配置文件或者Java代码来配置Spring Security的认证逻辑。可以自定义一个认证服务,继承自UserDetailsService接口,并实现其的loadUserByUsername方法,根据用户名从数据库或其他存储查询用户信息并返回一个UserDetails的实现类对象。 接着,配置一个登录表单,包括用户名和密码的输入框,并指定一个登录处理的URL。当用户填写完登录表单并提交时,通过POST请求将用户名和密码发送给登录处理URL。 在登录处理的方法,可以通过调用AuthenticationManager的authenticate方法来进行用户认证。认证成功后,可以通过HttpServletResponse的addCookie方法来添加一个Cookie,将用户信息存储在Cookie。 在处理用户的其他请求时,可以通过从HttpServletRequest获取Cookie来获取用户的登录状态信息。可以通过调用Cookie的getValue方法来获取Cookie的值,并进行相应的处理。例如,可以判断Cookie的值是否为空,如果为空则表示用户未登录,需要跳转到登录页面;如果不为空,可以解析Cookie的值,获取用户的登录信息,并根据需要进行相应的处理。 总的来说,Spring Boot项目实现登录功能并使用Cookie记录用户信息,首先需要配置Spring Security进行用户认证和授权的处理,然后在登录和其他请求的处理方法通过Cookie来获取和操作用户的登录状态信息。通过这种方式,可以实现一个简单的登录系统,并记录用户的会话信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值