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

news2024/10/5 18:30:48

前置学习:

  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.coloradmin.cn/o/725656.html

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

相关文章

Error:invalid character in indentifier

Error&#xff1a;invalid character in indentifier 解决方案&#xff1a; 一般是中英文写错了

【电影推荐系统】实时推荐

目录 原因 由于实时性&#xff0c;所以算法设计需要满足一下两点 算法设计 算法实现 算法公式 完整代码 原因 用户对电影的偏好随着时间的推移总是会发生变化的。此时离线系统无法解决&#xff0c;需要实时推荐。 由于实时性&#xff0c;所以算法设计需要满足一下两点 …

GIS杂记(二):Arcgis对采样点进行裁剪,获取指定区域内的采样点

有时候需要对栅格数据进行采样处理&#xff0c;如果采样点过多则会使得采样时间过长&#xff0c;今天在进行数据采样时&#xff0c;使用了1km*1km的渔网建立的采样点&#xff0c;大概有1百万个点&#xff0c;程序运行时间大概4个小时&#xff0c;但是其中有绝大部分数据都是空值…

微信小程序使用animation.css

animation.css是一款纯css动画库&#xff0c;其中提供了丰富的动画效果 我们直接下载animation.css&#xff0c;即可使用其中的样式 其官网为&#xff1a;Animate.css | A cross-browser library of CSS animations. 1.下载 使用npm下载animation.css&#xff1a; npm inst…

LVS简介及LVS-NAT负载均衡群集的搭建

目录 一、LVS群集简介 1.群集的含义和应用场景 2.性能扩展方式 3.群集的分类 负载均衡&#xff08;LB&#xff09; 高可用&#xff08;HA&#xff09; 高性能运算&#xff08;HPC&#xff09; 二、LVS负载均衡群集简介及搭建 1.负载均衡群集架构 2.三种工作模式 3.启…

基于servlet的简单登录界面

前端登录发起请求 1.安装axios axios 是一个 HTTP 的网络请求库 安装 npm install axios &#xff08;脚手架中&#xff09; 在 main.js 中配置 axios //导入网络请求库 import axios from axios; //设置访问后台服务器地址&#xff1a;ip&#xff0c;端口和项目名字&#xff0…

基于Python Django实现KNN协同电影推荐系统

系统说明 基于Python Django实现KNN协同电影推荐系统&#xff0c;有用户端和管理后端&#xff0c;完整可在任何环境运行。 KNN&#xff08;K-Nearest Neighbor&#xff09;算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类&#xff0c;也能用于回归。KNN通过测量…

使用前端JS上传文件到阿里云的OSS服务器,PHP生成STS临时访问凭证

官方教程地址&#xff1a;https://help.aliyun.com/document_detail/383950.html?spma2c4g.383952.0.0 这篇文章主要是指出官方教程没有说明的地方 后端代码 并非是完全完全不需要后端的参与。需要后端生成凭证&#xff0c;防止秘钥泄露 这里是官方的说明文档&#xff1a;使…

obj文件解析及用meshlab查看

举例 它以txt打开后如下所示 v -0.3 0 0.3 v 0.4 0 0 v -0.2 0.3 -0.1 v 0 0.4 0 # 4 verticesg head s 1 f 1/1/1 2/1/1 4/1/1 f 1/1/1 2/1/1 3/1/1 f 2/1/1 4/1/1 3/1/1 f 1/1/1 4/1/1 3/1/1一般而言obj文件以txt格式打开后包含如下片段 v -0.3 0 0.3 vt 0.625 0.458 0.00…

FPGA纯verilog实现UDP协议栈,GMII接口驱动88E1111,提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、该UDP协议栈性能4、详细设计方案网络PHYGMII AXIS接口模块AXIS FIFOUDP协议栈 5、vivado工程1-->B50610 工程6、上板调试验证并演示准备工作查看ARPUDP数据回环测试 7、福利&#xff1a;工程代码的获取 1、前言 目前网上的fpga实现ud…

密码学学习笔记(七):Modular arithmetic - 模算数

简介 模算术是整数的一种算术结构&#xff0c;其中数字在达到特定值时“环绕”。模运算使我们能够简单地生成群、环和域&#xff0c;这是大多数现代公钥密码系统的基本构造部分。其中数字超过一定值后&#xff08;称为模&#xff09;后会“卷回”到较小的数值。 模算数常见的…

5.2ORB-SLAM3之回环矫正

1.简介 在上一章《回环检测之检测是否存共视区域》已经介绍了检测共视区域的部分&#xff0c;接下来就是对共视区域进行回环矫正或者地图融合。 回环矫正和之前的ORBSLAM系列一致&#xff0c;就是消除因为长时间运动产生的位姿累计误差和尺度漂移。在ORBSLAM3中新增了多地图系…

idea集成maven-mvnd

maven-mvnd是什么&#xff1f; 参考文档&#xff1a; Maven加强版 — mvnd的使用测试 - 知乎 1.下载mvnd安装包 Releases apache/maven-mvnd GitHub 2.修改配置文件&#xff1a;安装包中的conf目录下的mvnd.properties文件 配置maven settings的地址&#xff1a; 注意&am…

MySQL配置主从备份

文章目录 1.什么是主从备份2. 原理3.配置主服务器4.配置从服务器4.1进入数据库&#xff0c;准备建立连接4.2开启 slave 连接&#xff0c;主备机连接成功&#xff0c;数据开始同步4.3查看有关从属服务器线程的关键参数的信息 1.什么是主从备份 主从复制简单来说就是主库把增删改…

环境搭载vscode

Windows 10 下 VS Code 配置 C 开发环境&#xff08;MinGW&#xff09; 读书读傻了哟 配置 C/C 环境   主要是配置launch.json、tasks.json这两个文件&#xff08;当然&#xff0c;还有别的.json文件&#xff0c;可有可无&#xff09;。这两个文件位于.vscode文件夹下&#…

mysql--第一天基础操作

1.创建数据库 2.查询创建数据的语句 3.使用数据库&#xff0c;查询当前默认的数据库以及使用的编码方式校验规则 4.删除数据库 5.在一张表中定义多个字段&#xff0c;要使用今天提到的所有的数据类型&#xff08;数字&#xff0c;文本&#xff0c;日期&#xff09; 查看表结构

产品方案设计高效的4大注意事项

做产品方案时&#xff0c;我们容易遭遇&#xff1a;未澄清需求、未梳理业务方案、缺少思考过程以及缺少对比方案等误区&#xff0c;往往会造成产品方案并不能完全解决用户问题&#xff0c;项目后期容易遇到需求变更等风险。 因此如何如何高效设计产品方案&#xff1f;就显得尤为…

SpringCloud入门实战(十二)-Sleuth+Zipkin分布式请求链路跟踪详解

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

Django的数据库配置、生成(创建)过程、写入数据、查看数据的学习过程记录

目录 01-配置数据库信息02-安装Python的MySQL数据库驱动程序 mysqlclient03-安装Mysql&#xff0c;并启动Mysql04-定义Django的数据库模型(定义数据表-编写models.py文件)05-按照数据的配置生成数据库(执行迁移命令)05-01-生成迁移执行文件05-02-执行数据库模型迁移 06-查看数据…

Vue.js Js引入相关

Vue.js vue.js 新增了一些语法,有一些旧的模组并没有使用"先进"的export和import语法 即 es语法进行模块化。 <script></script>但 editor.md 真的很好用. 但很抱歉,它在vue中无法使用 es6 进行导入。 所以需要使用传统的方式进行导入。 很多人会把js…