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

这篇具有很好参考价值的文章主要介绍了web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前置学习:

  1. http
  2. springmvc

会话技术

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

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

cookie

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

设置cookie

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

然后会在响应头中加一个Set-Cookie
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

获取cookie

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

然后会获取到所有的cookie
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

请求头会携带cookie
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

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的,只是数据在服务器。
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java
设置之后,响应的时候如果检测到有session,则会将这次会话的session发送过去。

删除session的某个值

web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java
可以看到先进行了判断。value为null就会删掉,所以删除session的值的方法就是设置value为null。
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

获取sesssion

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

    }

web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

如果将sessionid在浏览器进行删除。重新get,发现获取值为null,然后重新设置了一次session。所以如果删掉,服务器应该就找不到你的信息了。
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

优缺点

优点
存储在服务器,安全

缺点

  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>

web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

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
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java

复制去官网,就可以了,不过不能验证。
这也说明了,token的数据是不安全的,验证是安全的。
web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用,web的那些事,前端,学习,java文章来源地址https://www.toymoban.com/news/detail-550396.html

到了这里,关于web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web会话跟踪:Cookie与Session

    在Web应用中,同一个浏览器与Web服务器的一次一系列的各种交互活动称为 会话 。而Web应用往往需要对用户进行会话跟踪,记录用户的状态。下面简单介绍一下会话跟踪技术Cookie与Session。 Cookie ,有时也用其复数形式 Cookies,是一个保存在用户客户端计算机中的简单的小型文本

    2024年02月19日
    浏览(37)
  • SpringBootWeb 登录认证[Cookie + Session + Token + Filter + Interceptor]

    目录 1. 登录功能 1.1 需求 1.2 接口文档 1.3 登录 - 思路分析 1.4 功能开发 1.5 测试 2. 登录校验 2.1 问题分析 什么是登录校验? 我们要完成以上登录校验的操作,会涉及到Web开发中的两个技术: 2.2 会话技术 2.2.1 会话技术介绍 会话跟踪  2.2.2 会话跟踪方案 2.2.2.1 方案一 - Cookie

    2024年02月20日
    浏览(33)
  • 登录校验原理过程和统一拦截技术(Cookie、Sesstion 和JWT令牌)

    问题:在未登录情况下,我们也可以直接访问部门管理、员工管理等功能。 由于浏览器与web服务器中的数据交互是通过HTTP协议的,而HTTP协议是无状态的–即每个页面中的请求和响应都是独立的,没有状态存在。 所以我们需要进行 登录校验 : 每次访问页面的时候可以用 i

    2024年02月11日
    浏览(34)
  • JAVAWeb10-Web 开发会话技术-Session-02

    ● 思考两个问题—抛砖引玉 不同的用户登录网站后,不管该用户浏览该网站的哪个页面,都可显示登录人的名字,还可以随时去查看自己的购物车中的商品, 是如何实现的? 也就是说,一个用户在浏览网站不同页面时,服务器是如何知道是张三在浏览这个页面,还是李四在浏

    2024年02月01日
    浏览(29)
  • 九、会话控制——cookie、session、token

    HTTP是一种无状态协议,它没有办法区分多次的请求是否来自于同一个客户端,无法区分用户。而产品中又大量存在这样的需求,所以我们需要通过会话控制来解决问题。 常见的会话控制有三种: (1)cookie (2)session (3)token cookie 是HTTP服务器发送到用户浏览器并保存在本

    2024年02月11日
    浏览(32)
  • 【Python】Web学习笔记_flask(6)——会话&session对象

    处理利用cookie来判断用户登录外,也可以使用session来判断用户是否登录 html代码和cookie对象的设置相同    

    2024年02月12日
    浏览(33)
  • gin会话控制篇 - Cookie和Session

    HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出 Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思 Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求

    2024年01月21日
    浏览(29)
  • 【Servlet学习六】Cookie 与Session && 实现登录与上传文件

    目录 一、Cookie与Session(掌握) 🌈1、Cookie是什么? 🌈2、Session是什么? 二、代码功能演示 🌈1、实现登录功能(掌握) 🌈2、实现上传文件功能(掌握) 1、目标:实现程序,通过网页上传一张图片到服务器。 2、核心方法总结 问题1:为什么会有cookie?         HTTP协议

    2024年02月11日
    浏览(39)
  • Servlet【 ServletAPI中的会话管理Cookie与Session】

    HTTP 协议自身是属于 “无状态” 协议. “无状态” 的含义指的是: 默认情况下 HTTP 协议的客户端和服务器之间的这次通信, 和下次通信之间没有直接的联系.但是实际开发中, 我们很多时候是需要知道请求之间的关联关系的. 例如登陆网站成功后, 第二次访问的时候服务器就能知

    2024年02月09日
    浏览(43)
  • 【python】flask基于cookie和session来实现会话控制

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开

    2024年03月24日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包