【Java那些事】关于如何使用Jwt令牌的那些事

devtools/2024/9/23 10:50:57/

先简单介绍一下吧 ^_~

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间传递声明的一种基于JSON的轻量级的令牌。

JWT令牌由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)。头部通常包含令牌的类型和使用的加密算法;载荷包含声明(claims),如用户信息、权限等;签名是对头部和载荷的签名,用于验证令牌的真实性和完整性。

JWT令牌的特点包括:

  1. 跨平台:JWT是基于JSON的标准,适用于不同平台和语言。
  2. 自包含:JWT令牌包含了所有用户信息和声明,避免了需要在服务器存储会话信息。
  3. 可验证性:使用签名对JWT进行验证,确保令牌的真实性和完整性。
  4. 非状态性:JWT令牌在服务器端不需要存储状态信息,降低了服务器的负担。

总的来说,JWT令牌提供了一种安全、轻量级的身份验证和授权机制,广泛应用于Web开发中的用户认证和授权过程中。

先创建一个JwtUtil 工具类,来制作Jwt令牌

java">public class JwtUtil {private static final String KEY = "Java"; //自定义KEY//获得令牌 tokenpublic static String getToken(Map<String, Object> claims){return JWT.create().withClaim("claims", claims).withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12)).sign(Algorithm.HMAC256(KEY));}//转换token令牌public static Map<String, Object> parseToken(String token) {return JWT.require(Algorithm.HMAC256(KEY)).build().verify(token).getClaim("claims").asMap();}}

在 实现用户登录方法 的时候生成令牌

java"> @PostMapping("/login")public Result<String> login(String username, String password){String pwd = Md5Util.getMD5String(password);LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(User::getUsername, username);User user = userService.getOne(queryWrapper);if(user == null){return Result.error("该用户不存在");}else {HashMap<String, Object> claims = new HashMap<>();claims.put("id", user.getId());claims.put("username", user.getUsername());String token = JwtUtil.getToken(claims);return Result.success(token);}}

 生成的令牌有什么用呢???【应用于Web开发中的用户认证和授权过程中】

在拦截器这里就能发挥它的作用啦<(* ̄▽ ̄*)/

java">@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//令牌验证String token = request.getHeader("Authorization");try {Map<String, Object> claims = JwtUtil.parseToken(token);//把业务数据存储到ThreadLocalThreadLocalUtil.set(claims);return true;}catch (Exception e){response.setStatus(401);return false;}}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {//清空数据ThreadLocalUtil.remove();}
}


http://www.ppmy.cn/devtools/35257.html

相关文章

springboot 打成的jar包为什么能直接运行?

Spring Boot 应用程序被打包成的jar包之所以可以直接通过 java -jar 命令运行&#xff0c;是因为Spring Boot在构建过程中做了一些特殊的设计和配置。具体原因&#xff1a; Fat/Uber JAR: Spring Boot使用maven插件spring-boot-maven-plugin&#xff08;或Gradle对应的插件&…

Docker基本操作 挂载数据卷

在创建一个容器的时候让容器挂载到一个数据卷: 命令:docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx 这里的数据卷如果没有提前创好会自动创建 下边是命令解析 将容器挂载到一个数据卷之后 可以在查看数据卷的目录 在数据卷的目录可以找到容器的内容…

ld.exe: unrecognized option ‘--major-image-version‘

问题&#xff1a;在windows环境使用cmakemingw32gcc交叉工具链报错 原因&#xff1a;将project指令放到了set(CMAKE_SYSTEM_NAME Linux)之前 下面为CMakeLists.txt正确写法&#xff1a; cmake_minimum_required(VERSION 3.0)#set(CMAKE_C_COMPILER_WORKS 1)#set(CMAKE_CXX_C…

Android 振动和触感反馈功能失效问题分析

文章目录 一、 可以先通过adb来确定是否有打印Log&#xff0c;查看中相关的按键振动事件是否有效二、 适配按键事件三、延长振动时长 在Android13的项目(MTK平台)中遇到这样一个问题&#xff0c;在设置 - 提示音和振动 - 振动和触感反馈 - 打开按触反馈&#xff0c;但是按键没有…

P8800 [蓝桥杯 2022 国 B] 卡牌

P8800 [蓝桥杯 2022 国 B] 卡牌 分析 “最多” -- 二分 1.二分区间&#xff08;凑齐的卡牌套数&#xff09;&#xff1a; l&#xff1a;a[]min&#xff1b;r&#xff1a;(a[]b[])max 2.check(x)&#xff1a; &#xff08;1&#xff09;for循环内&#xff1a; 判断x - a[i…

如何用中医揿针治疗肩周炎?

点击文末领取揿针的视频教程跟直播讲解 首先我们先来了解什么是肩周炎 【中医辨证】 肩周炎中医称之为漏肩风、锁肩风、肩凝症等&#xff0c;将肩周炎的一系列症状归纳为痹证的范畴&#xff0c;故又有肩痹、肩胛周痹等病名。 在中医古典医籍《素问痹论》中有骨痹、筋痹、脉…

【leetcode面试经典150题】78.二叉树中的最大路径和(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

【机器学习第二期】MATLAB实现随机森林法

随机森林(Random Forest, RF) 1 原理1.1 重采样方法(Bootstrap resampling method)1.2 特征重要性方法排列重要性法(Permutation Importance method)2 MATLAB相关函数:TreeBagger3 案例:干旱驱动因子分析3.1 案例说明结果变量(Outcome variable)解释变量类别3.2 基于…