Cookie、Session、JWT令牌技术、JwtUtils工具类

目录

1.Cookie技术(客户端会话跟踪技术)

1.1 定义

1.2 执行过程

1.3 三个自动

1.4 优缺点

1.5 代码实现(浏览器请求和响应状态)

2.Session技术(服务器端会话跟踪技术)

2.1 定义

2.2 执行过程

2.3 优缺点

2.4 服务器集群环境无法使用Session

2.5 代码实现(浏览器请求和响应状态)

3.JWT令牌(签名)

3.1 定义

3.2 三部分组成(标头、有效载荷、签名)

3.3 代码实现(生成令牌,校验令牌)

3.4 实战实现

3.4.1 登录成功(生成令牌)

3.4.1.1 JwtUtils.java 工具类

3.4.1.2 JwtProperties.java 配置类

3.4.1.3 EmployeeController.java 控制层类

3.4.2 定义JWT拦截器(校验令牌)


HTTP协议无状态:

为什么我们需要会话跟踪技术,这是因为HTTP协议是一种无状态的协议。所谓无状态,指的是每一次请求都是独立的,下一次请求并不会携带上一次请求的数据。

1.Cookie技术(客户端会话跟踪技术)

1.1 定义


Cookie 是客户端会话跟踪技术,它是存储在客户端浏览器的。

这样我们就可以基于 cookie 在同一次会话的不同请求之间来共享数据。

1.2 执行过程

响应头 Set-Cookie :设置Cookie数据的。

请求头 Cookie:携带Cookie数据的。

以下是详细的执行流程:

  1. 用户访问网站

    • 用户在浏览器中输入网址或点击链接,请求访问某个网站。
  2. 服务器响应请求

    • 服务器接收到请求后,生成响应,并可能设置一个或多个 Cookie。(用户名,ID
    • 响应头中包含 Set-Cookie 字段,该字段包含 Cookie 的名称、值以及其他属性(如域、路径、到期日期等)。
  3. 浏览器存储 Cookie

    • 浏览器接收到响应后,解析 Set-Cookie 头,并将 Cookie 存储在用户的本地设备上。
    • 存储的 Cookie 根据其属性(如域、路径、到期日期)进行分类管理。
  4. 后续请求携带 Cookie

    • 当用户继续浏览网站或进行其他操作时,浏览器会自动在后续请求中包含相应的 Cookie。
    • 请求头中会包含 Cookie 字段,该字段包含之前存储的所有相关 Cookie。
  5. 服务器处理 Cookie

    • 服务器接收到包含 Cookie 的请求后,会解析 Cookie 头,获取其中的信息。
    • 服务器可以根据 Cookie 的内容来识别用户、维护会话状态、提供个性化内容等。
  6. 更新或删除 Cookie

    • 在后续的请求和响应中,服务器可以更新 Cookie 的值或属性。
    • 如果服务器发送一个带有相同名称但具有更短到期日期的 Cookie,浏览器会更新该 Cookie 并可能在到期后自动删除它。

1.3 三个自动

  • 服务器会 自动 的将 cookie 响应给浏览器。
  • 浏览器接收到响应回来的数据之后,会 自动 的将 cookie 存储在浏览器本地。
  • 在后续的请求当中,浏览器会 自动 的将 cookie 携带到服务器端。

1.4 优缺点


优点:HTTP协议中支持的技术(像Set-Cookie 响应头的解析以及 Cookie 请求头数据的携带,都是浏览器自动进行的,是无需我们手动操作的)。

缺点:移动端APP(Android、IOS)中无法使用Cookie不安全,用户可以自己禁用Cookie,Cookie不能跨域。

1.5 代码实现(浏览器请求和响应状态)

使用代码实现:

@Slf4j
@RestController
public class SessionController {
 
    //设置Cookie
    @GetMapping("/c1")
    public Result cookie1(HttpServletResponse response){
        response.addCookie(new Cookie("login_username","itheima")); //设置Cookie/响应Cookie
        return Result.success();
    }
	
    //获取Cookie
    @GetMapping("/c2")
    public Result cookie2(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if(cookie.getName().equals("login_username")){
                System.out.println("login_username: "+cookie.getValue()); //输出name为login_username的cookie
            }
        }
        return Result.success();
    }
}  

访问c1接口,设置Cookie,http://localhost:8080/c1

设置的cookie,通过响应头Set-Cookie响应给浏览器,并且浏览器会将Cookie,存储在浏览器端。

访问c2接口 http://localhost:8080/c2此时浏览器会自动的将Cookie携带到服务端。

这样我们就可以基于 cookie 在同一次会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值