广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何使用会话Cookie和Java实现JWT身份验证
  • 675
分享到

如何使用会话Cookie和Java实现JWT身份验证

2024-04-02 19:04:59 675人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1、基于会话的身份验证那么什么是会话Cookie? 2、基于令牌的身份验证哪个更好用?3、Jwt实现登录Http是无状态协议,用于传输数据。它启用了客户端和服务器端>

Http是无状态协议,用于传输数据。它启用了客户端和服务器端>之间的通信。它最初是为了在WEB浏览器和Web服务器之间建立连接而建立的。比如在网上购物,我们添加一些商品,例如。耳机到我们的购物车,然后,我们继续寻找其他项目,在此期间,我们希望在执行任何其他任务是存储购物车项目的状态且不丢失它们。这意味着我们希望在整个购物过程中记住我们的状态。由于HTTP是无状态协议,因此要克服问题,我们可以使用会话或者令牌

1、基于会话的身份验证

JSON Web令牌出现之前,我们主要使用这种身份验证。在这种身份验证中,服务器负责身份验证,客户端不知道发送请求后服务器端会发生什么。

那么什么是会话Cookie?

由于客户端未指定Expires(过期时间)或Max-Age(最大上限)指令,因此在客户端关闭时将其删除。但是,Web浏览器可能会使用会话还原,这会使大多数会话Cookie永久保持状态,就像从未关闭过浏览器一样。

用户在网络浏览器上登录网站发生什么。例如,用户登录后,服务器 将为该用户创建一个会话并将该会话数据存储在服务器内存中。当用户在网站上执行某些活动时,会创建一个会话ID,该会话ID存储在客户端浏览器的cookie中。在用户提出的每个请求中,cookie都将随之发送。然后,当用户最初登录时,服务器可以使用存储在服务器内存中的会话数据来验证Cookie上的会话数据。当用户从网站注销时,该会话数据将从数据库和服务器内存中删除。

2、基于令牌的身份验证

在基于令牌的身份验证中,我们使用JWT(jsON Web Tokens)进行身份验证。这是RESTful api的广泛使用方法。

当用户发送带有登录详细信息的用户身份验证请求时,服务器将以JSON WEB TOKENS(JWT)的形式创建一个加密的令牌,并将其发送回客户端。当客户端收到令牌时,这意味着该用户以通过身份验证,可以使用客户端执行任何活动。

JWT通常存储在客户端的localstorage中,当用户从服务器请求任何数据或对该网站执行任何活动时,JWT将作为该用户的唯一密钥发送。因此,当服务器接收到该请求时,它将针对每个请求验证JWT仅是该特定用户,然后将所需的响应发送回客户端。

localStorage.setItem("key", "value");

用户状态存储在客户端JWT中。当用户注销时,令牌将从客户端(localStorage)中删除。因此,大多数数据存储在客户端,并且可以直接访问,而不是向服务器发送请求。

JSON WEB TOKENS由(.)连接的三个部分组成:
1.标头
2.有效载荷
3.签名

JWT结构:
xxxxx.yyyyy.zzzzz

输出包含三个由点分割的Base64-URL字符串,可以在html和HTTP环境中轻松传递这些字符串,与基于XML的标准(例如SAML)相比,它更紧凑。

JWT已对先前的标头和有效负载进行了编码,并用一个密钥进行签名,如下

哪个更好用?

在现代Web应用程序中,JWT被广泛使用,因为它的伸缩性优于基于会话的cookie,因为令牌存储在客户端,而会话使用服务器内存来存储用户数据,这可能是一个大问题。大量用户一次访问应用程序。由于JWT是随着每个请求一起发送的,而且包含所有用户信息,因此即使对JWT进行了编码,也有必要在JWT中使用必要的信息,并且应避免使用敏感信息或者将其加密以防止安全攻击。

没有固定的方法可以始终使用,它取决于开发人员和要求的类型,以找出在哪种情况下需要使用哪种方法。

3、jwt实现登录


 //定义JWT的有效时长七天
 private static final long EXPIRE_TIME = 60 * 1000 * 60 * 24 * 7;
 //签发人
 private static String ISSUER = "K_ang";
 
 private static final String SING = K*&^A%$#N@!G;

 
 public static String getToken(Map<String, String> map) {

  //设置过期时间
  Date date = null;
  try {
   date = new Date(System.currentTimeMillis() + EXPIRE_TIME);

   //创建token
   JWTCreator.Builder builder = JWT.create()
     .withIssuer(ISSUER)
     .withExpiresAt(date);
   //添加信息
   map.forEach((k, v) -> {
    builder.withClaim(k, v);
   });
   return builder.sign(AlGorithm.HMac256(SING));
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }

 
 public static boolean verify(String token, String userNo) {
  try {
   //设置加密算法
   JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SING)).withClaim("userNo", userNo).build();
   //校验token
   DecodedJWT jwt = verifier.verify(token);
   return true;
  } catch (Exception e) {
   return false;
  }


 }

 
 public static String getTokenInfo(String token) {
  DecodedJWT decode = JWT.decode(token);
  return decode.getClaim("userNo").asString();
 }
}

@PostMapping("/login")
 public Result login(@PathParam("empNo") String empNo, @PathParam("empPassWord") String empPassword) {
  if (empNo == null || "".equals(empNo)) {
   return ResultUtil.error(103, "请输入用户名,用户名不能为空");
  }
  if (empPassword == null || "".equals(empPassword)) {
   return ResultUtil.error(103, "请输入密码,密码不能为空");
  }
  Emp emp = empService.login(empNo, empPassword);
  if (emp == null) {
   return ResultUtil.error(103, "用户不存在,获取token失败");
  }
  if (emp.getEmpPassword() == null || !emp.getEmpPassword().equals(empPassword)) {
   return ResultUtil.error(103, "密码错误,获取token失败");
  }
  //正常token
  String token = JwtUtils.sign(empNo, empPassword);
  emp.setToken(token); 
  return ResultUtil.success(200, "登录成功", emp);
 }

以上就是如何使用会话Cookie和Java实现JWT身份验证的详细内容,更多关于使用会话Cookie和Java实现JWT身份验证的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何使用会话Cookie和Java实现JWT身份验证

本文链接: https://www.lsjlt.com/news/121513.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用会话Cookie和Java实现JWT身份验证
    目录1、基于会话的身份验证那么什么是会话Cookie? 2、基于令牌的身份验证哪个更好用?3、jwt实现登录HTTP是无状态协议,用于传输数据。它启用了客户端和服务器端>...
    99+
    2022-11-11
  • Java JWT如何实现跨域身份验证
    今天小编给大家分享一下Java JWT如何实现跨域身份验证的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、JWT...
    99+
    2023-06-26
  • Django中如何实现JWT身份验证
    这篇文章主要介绍Django中如何实现JWT身份验证,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.认证与授权验证:身份验证是验证个人或设备标识的过程。身份验证过程之一是登录过程。注册网站后,您的信息(ID,密码,...
    99+
    2023-06-14
  • Java如何实现身份证号码验证
    小编给大家分享一下Java如何实现身份证号码验证,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:package xxx;import ...
    99+
    2023-05-31
    java
  • golang中gin框架接入jwt如何使用token验证身份
    本篇内容介绍了“golang中gin框架接入jwt如何使用token验证身份”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!jwtjwt的原理...
    99+
    2023-06-22
  • 如何使用Go语言和Redis实现用户身份验证
    如何使用Go语言和Redis实现用户身份验证一、简介在Web应用程序中,用户身份验证是必不可少的一个功能。用户需要提供有效的凭证,才能访问特定的资源或执行某些操作。Go语言是一种强大的编程语言,而Redis是一个快速、高可用的内存数据存储系...
    99+
    2023-10-26
    Go语言 redis 用户身份验证
  • 如何用sql实现18位身份证校验
    本篇文章为大家展示了如何用sql实现18位身份证校验,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。身份证校验码的计算方法1、将前面的身份证号码17位数分别乘以不同的...
    99+
    2022-10-19
  • AngularJS如何实现用户访问身份认证和表单验证功能
    今天小编给大家分享一下AngularJS如何实现用户访问身份认证和表单验证功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-07-04
  • C#中如何使用权限控制和身份验证
    C#中如何使用权限控制和身份验证,需要具体代码示例在当今互联网时代,信息安全问题受到了越来越高的重视。为了保护系统和数据的安全,权限控制和身份验证成为了开发者必不可少的一部分。C#作为一种常用的编程语言,提供了丰富的功能和类库来帮助我们实现...
    99+
    2023-10-22
    C# 身份验证 权限控制
  • 如何使用PHP进行AI人脸识别和身份验证?
    随着科技的不断进步和人工智能技术的快速发展,AI人脸识别和身份验证已经成为了现代社会中普遍使用的技术手段。通过AI人脸识别和身份验证技术,我们可以在很短的时间内对用户进行真伪核实,并保护系统信息的安全性。PHP是一种流行的编程语言,本文将详...
    99+
    2023-05-21
    AI 人脸识别 PHP
  • 如何在java项目中利用google的身份验证器实现一个动态口令验证功能
    这篇文章给大家介绍如何在java项目中利用google的身份验证器实现一个动态口令验证功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。google身份验证器的原理是什么呢?客户端和服务器事先协商好一个密钥K,用于一次...
    99+
    2023-05-31
    google ava java
  • laravel 中如何使用二维码实现身份认证?
    Laravel 中如何使用二维码实现身份认证? 二维码在现代社会已经普及,它不仅仅是一种方便的扫描方式,也成为了一种重要的安全认证方式。在 Laravel 中,我们可以使用二维码实现身份认证,提高系统的安全性。本文将介绍如何使用 Larav...
    99+
    2023-10-25
    二维码 laravel 面试
  • 如何使用密钥身份验证在CentOS服务器上实现更安全的SSH登录
    要在CentOS服务器上实现更安全的SSH登录,你可以使用密钥身份验证。以下是一些步骤可以帮助你完成这个过程:1. 生成密钥对:在本...
    99+
    2023-10-10
    CentOS
  • 如何使用PHP和Vue实现数据验证功能
    概述:在开发Web应用程序时,数据验证是一个非常重要的环节,它可以保护我们的应用程序免受无效或恶意输入的影响。本文将介绍如何使用PHP和Vue框架来实现强大的数据验证功能。我们将使用PHP后端来接收和处理前端发送的数据,并使用Vue的表单验...
    99+
    2023-10-21
    VUE PHP 数据验证功能
  • 如何使用MySQL和JavaScript实现一个简单的数据验证功能
    如何使用MySQL和JavaScript实现一个简单的数据验证功能在Web开发中,数据验证是一个非常重要且必不可少的步骤。它可以确保用户输入的数据符合一定的规则和格式,提升用户体验,同时也能保护数据库的完整性。本文将介绍如何使用MySQL和...
    99+
    2023-10-22
    MySQL 数据验证 JavaScript
  • 如何使用MySQL和Java实现一个简单的数据备份功能
    如何使用MySQL和Java实现一个简单的数据备份功能随着数据的日益增多,数据备份成为了保障数据安全的重要一环。本文将介绍如何使用MySQL和Java实现一个简单的数据备份功能,并给出具体的代码示例。一、数据库备份原理数据库备份,即将数据库...
    99+
    2023-10-22
    MySQL Java 数据备份
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作