web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用

news/2024/10/17 14:27:06/

前置学习:

  1. http
  2. springmvc

文章目录

  • 会话技术
  • cookie
    • 设置cookie
    • 获取cookie
    • cookieAPI
    • 优缺点
    • cookie的删除
  • session
    • 设置session
    • 删除session的某个值
    • 获取sesssion
    • 优缺点
  • 令牌JWT
    • JWT介绍
    • JWT的使用
    • java-jwt
    • jjwt
    • 手动解析

会话技术

会话:用户打开浏览器,访问web服务器资源,会话建立,直到有一方断开连接会话结束,一次会话可以多次请求和连接

会话跟踪:一种维护浏览器状态的方式,服务器需要识别多次请求是否来自同一浏览器,以便同一次会话多次请求间共享数据。

cookie

cookies就是一种暂存在你浏览器中的一些信息文件

设置cookie

    @GetMapping("/set")public String setCookie(HttpServletResponse response) {response.addCookie(new Cookie("name","yu"));return "cookie";}

然后会在响应头中加一个Set-Cookie
在这里插入图片描述

获取cookie

    @GetMapping("/get")public String getCookie(HttpServletRequest request) {Cookie[] cookies = request.getCookies();Arrays.stream(cookies).forEach(System.out::println);return "cookie";}

然后会获取到所有的cookie
在这里插入图片描述

请求头会携带cookie
在这里插入图片描述

cookieAPI

// 有get和set方法的
// cookie注释
Comment// cookie的域
// 域名的形式由RFC 2109指定。域名以句点(.foo.com)开头
// 表示cookie对指定域名系统(DNS)区域中的服务器可见(例如,www.foo.com,但不是A.b.foo.com)。
// 默认情况下,cookie只返回给发送它们的服务器。
Domain// 最长使用期限(以秒为单位)
MaxAge// 指定cookie的路径,客户端应将cookie返回到该路径
Path// 是否应仅使用HTTPS或SSL等安全协议发送cookie。
Secure// cookie的key 和 value
Name value// 版本
Version

优缺点

优点

  1. HTTP协议支持的技术

缺点

  1. 移动端APP不能使用cookie
  2. 不安全,用户可以禁止cookie
  3. cookie不能跨域

cookie的删除

设置cookie的maxage为0就可以了

session

Session是另一种记录浏览器状态的机制,Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的时候,服务把用户的信息,以某种形式记录在服务器,这就是Session

设置session

这里就不是request或者response了

    @GetMapping("/set")public String setSession(HttpSession session){session.setAttribute("user","1234");return "ok";}

就会在setcookie响应报文中生成一个jsessionid的cookie,所以说session还是基于cookie的,只是数据在服务器。
在这里插入图片描述
设置之后,响应的时候如果检测到有session,则会将这次会话的session发送过去。

删除session的某个值

在这里插入图片描述
可以看到先进行了判断。value为null就会删掉,所以删除session的值的方法就是设置value为null。
在这里插入图片描述

获取sesssion

    @GetMapping("/get")public String getSession(HttpServletRequest request){HttpSession session = request.getSession();Object sessionAttribute = session.getAttribute("user");System.out.println(sessionAttribute);return "ok";}

在这里插入图片描述

如果将sessionid在浏览器进行删除。重新get,发现获取值为null,然后重新设置了一次session。所以如果删掉,服务器应该就找不到你的信息了。
在这里插入图片描述
在这里插入图片描述

优缺点

优点
存储在服务器,安全

缺点

  1. 集群环境无法使用session
  2. cookie的缺点

令牌JWT

JWT介绍

JWT全名JSON WEB TOKEN
也就是将json进行了封装

JWT的组成有3部分
第一部分:头,记录令牌的类型、签名算法。
第二部分:自定义信息,
第三部分:签名、防止被修改。

生成:
第一部分、第二部分进行base64编码生成的
第三部分是加入12部分和签名算法以及密钥进行签名。

优点

  1. 支持pc端、移动端
  2. 解决集群认证
  3. 减轻服务器存储

缺点
1。 需要自己实现

JWT的使用

java的JWT实现有挺多的。这里选取2个星最多的进行学习。
maven坐标
可以看到java-jwt是jwt官方的实现

        <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.2.1</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-root</artifactId><version>0.11.5</version></dependency>

在这里插入图片描述
在这里插入图片描述

java-jwt

生成jwt

还有些设置,这里列举用的多的

        JWT.create()  // 新建jwt构造器.withPayload(Map.of("key1","value1")) // 添加要设置为有效载荷的特定索赔。如果所提供的映射为null,则不会更改任何内容.withClaim("字符串","类型有很多") // 添加自定义索赔值.withArrayClaim("数组",new String[]{"String","Integer","Long3类数组"}) // 添加自定义索赔值.withJWTId("jwtid") //将特定的JWTId(“id”)声明添加到有效载荷中。.withKeyId("keyid") //将特定的密钥Id(“kid”)声明添加到标头中。.withSubject("subject") //将特定的主题(“sub”)声明添加到有效载荷中。.withExpiresAt(new Date(System.currentTimeMillis() + 1000*60))  //设置超时时间,60s后过期.sign(Algorithm.HMAC256("密钥需要5个字符以上")); // 以指定签名算法生成密钥

验证jwt

        JWT.require(Algorithm.HMAC256("密钥需要5个字符以上")) // 验证的算法.build() // 创建验证.verify("set的token") // 根据给定的令牌执行验证。.getClaims(); // 获取参数

jjwt

生成

        Map<String,Object> claims = new HashMap<>();claims.put("key1","value1");Jwts.builder().setClaims(claims) // 添加要设置为有效载荷的特定索赔.setExpiration(new Date(System.currentTimeMillis() + 1000*60)) //设置超时时间,60s后过期.signWith(SignatureAlgorithm.ES256,"密钥").setId().compact() // 生成token

验证,如果报错则被修改。

        Claims body = Jwts.parser().setSigningKey("密钥").parseClaimsJws("set的token").getBody();

手动解析

程序有一个token
在这里插入图片描述

复制去官网,就可以了,不过不能验证。
这也说明了,token的数据是不安全的,验证是安全的。
在这里插入图片描述


http://www.ppmy.cn/news/755118.html

相关文章

记一次生产环境的轻量级资源监控(自用)

资源监控产品比较成熟&#xff0c;例如zabbix&#xff0c;可以做资源监控、日志监控等&#xff0c;但真实生产环境由于各种原因&#xff0c;导致需要使用轻量级的资源监控。 1. 背景 1&#xff09;笔者的项目&#xff0c;服务涉及到多个子系统&#xff0c;其中有10个子系统部署…

CPU 内存 硬盘的作用与关系

CPU只负责计算&#xff0c;约20000MB/s&#xff1b; 内存只负责数据临时存储&#xff0c;用于缓解CPU与硬盘之间速度不匹配问题&#xff0c;约10000~15000MB/s&#xff1b; 硬盘只负责数据存储&#xff0c;约200~600MB/s。

硬盘缓存作用是什么,缓存是不是越大越好?

大家都知道硬盘对电脑来说比较重要的&#xff0c;因为硬盘可以储存许多重要的东西。因而大家一致认为硬盘缓存越大越好&#xff0c;因为他们认为硬盘缓存大了&#xff0c;电脑的运行速度就会变快。所以不少人在去买硬盘的时候&#xff0c;都不考虑其他的只一昧跟营业员说要缓存…

计算机cdef硬盘的区别,电脑硬盘有什么作用?是指CDEF盘吗?

就是命名为CDEF的盘。 硬盘(英语&#xff1a;Hard Disk Drive&#xff0c;缩写&#xff1a;HDD)是计算机上使用的以旋转盘片为基础的非易失性存储器&#xff0c;它在平整的磁性表面存储和检索数字数据&#xff0c;数据通过离磁性表面很近的磁头由电磁流来改变极性的方式被写入到…

硬盘缓存的主要作用

硬盘的缓存主要起三种作用&#xff1a; 1预读取 当硬盘受到CPU指令控制开始读取数据时&#xff0c;硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中&#xff08;由于硬盘上数据存储时是比较连续的&#xff0c;所以读取命中率较高&#xff09;&a…

内存和硬盘在计算机中的作用,硬盘和内存在计算机中起什么作用?

许多购买计算机的人仍然不知道硬盘和内存有什么区别&#xff0c;在计算机中起什么作用&#xff0c;很容易将内存用作硬盘&#xff0c;并且很多人很容易混淆内存模块在带有存储卡的计算机中。计算机中的内存与手机的操作内存相同&#xff0c;都是移动内存。以下安装程序将告诉您…

硬盘是由什么组成的 硬盘特点有哪些

硬盘是由什么组成的 无论哪种硬盘&#xff0c;都是由盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部份组成。 所有的盘片都固定在一个旋转轴上&#xff0c;这个轴即盘片主轴。 而所有盘片之间是绝对平行的&#xff0c;在每个盘片的存储面上都…

计算机硬盘工作时应该避免什么,什么是电脑硬盘?有何作用?如何保养它?

一,前言:什么是硬盘 内存RAM特点是读写速度较快,但是停电之后内容就全丢失了,这就需要另一种存储器——外存储器。外存储器分为软盘、硬盘、光盘等。 硬盘就是一种最为常见的外存储器,它好比是数据的外部仓库一样。电脑除了要有“工作间”,还要有专门存储东西的仓库。硬盘…