JWT令牌

简介:

1.JWT全称:JSON Web Token(https://iwt.io/)

定义了一种简洁的、自包含的格式,用于通信双方以json数据格式安全的传输信息

2.组成:
>第一部分:Header(头),记录令牌类型、签名算法等。例如:("alg":“HS256",“type":"JWT”)

>第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。例如:{"id":"1","username":"Tom”)

>第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。

注:Base64:是一种基于64个可打印字符(A-Z a-z 0-9 +/)来表示二进制数据的编码方式。

认证登录

需要使用JwtUtil这个工具类

UserController

//    登录@PostMapping("/login")public Result<String> login(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$")String password) {// 根据用户名查询用户User loginUser = userService.findByUserName(username);//判断该用户是否存在if (loginUser == null) {return Result.error("用户名错误");}//判断密码是否正确     loginUser对象中的password是密文if (Md5Util.getMD5String(password).equals(loginUser.getPassword())) {//登陆成功Map<String,Object> claims = new HashMap<>();claims.put("id",loginUser.getId());claims.put("username",loginUser.getUsername());String token = JwtUtil.genToken(claims);return Result.success(token);}return Result.error("密码错误");}

ArticleController

package com.rzl.controller;
import com.rzl.pojo.Result;
import com.rzl.utils.JwtUtil;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Map;@RestController
@RequestMapping("/article")
public class ArticleController {@GetMapping("list")public Result<String> list(@RequestHeader(name = "Authorization") String token, HttpServletResponse response) {
//验证tokentry {Map<String,Object> claims = JwtUtil.parseToken(token);return Result.success("所有的文章数据...");} catch (Exception e) {
//            http响应状态码为401response.setStatus(401);return Result.error("未登录");}}}

使用postman

获取用户详细信息

User

package com.rzl.pojo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private Integer id;//主键IDprivate String username;//用户名@JsonIgnore   //让springmvc把当前对象转换为json字符串时,忽略password,最终的json字符串中就没有password这个属性private String password;//密码private String nickname;//昵称private String email;//邮箱private String userPic;//用户头像地址private LocalDateTime createTime;//创建时间private LocalDateTime updateTime;//更新时间
}
application.yml中添加如下代码
#  驼峰命名和下划线命名的自动转换
mybatis:configuration:map-underscore-to-camel-case: true

UserController:

@GetMapping("/userInfo")public Result<User> getUserInfo(@RequestHeader(name = "Authorization") String token) {
//        根据用户名查询用户Map<String, Object> map = JwtUtil.parseToken(token);String username = (String) map.get("username");User user = userService.findByUserName(username);return Result.success(user);}
}

使用postman

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90424.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90424.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90424.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能制造场景195个术语的16个分类

说明&#xff1a;《智能制造典型场景参考指引&#xff08;2025年版&#xff09;》日前&#xff0c;由工信部办公厅正式发布&#xff0c;将成为众多制造型企业的工作纲领 1. 工厂数字化规划设计&#xff08;1.1&#xff09;&#xff1a;在电脑上用专业软件设计工厂布局、规划生产…

[论文阅读] 人工智能 + 软件工程 | 微信闭源代码库中的RAG代码补全:揭秘工业级场景下的检索增强生成技术

微信闭源代码库中的RAG代码补全&#xff1a;揭秘工业级场景下的检索增强生成技术 论文标题&#xff1a;A Deep Dive into Retrieval-Augmented Generation for Code Completion: Experience on WeChatarXiv:2507.18515 A Deep Dive into Retrieval-Augmented Generation for Co…

RabbitMQ—仲裁队列

上篇文章&#xff1a; RabbitMQ集群搭建https://blog.csdn.net/sniper_fandc/article/details/149312481?fromshareblogdetail&sharetypeblogdetail&sharerId149312481&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 Raft一致性算法…

[2025CVPR-目标检测方向] CorrBEV:多视图3D物体检测

1. ​研究背景与动机​ 论文关注自动驾驶中相机仅有的多视图3D物体检测&#xff08;camera-only multi-view 3D object detection&#xff09;问题。尽管基于鸟瞰图&#xff08;BEV&#xff09;的建模近年来取得显著进展&#xff08;如BEVFormer和SparseBEV等基准模型&#xf…

oracle 数据库批量变更数据 将a表字段批量更新为b表字段

需求&#xff1a;将excel表中的数据批量更新到 taccoinfo表中vc_broker字段0、备份&#xff1a;create table taccoinfo0724 as select vc_custno ,vc_broker from taccoinfo 1、创建临时表&#xff1a; create table taccoinfo0724_1 as select vc_custno ,vc_broker from…

vim-xcode 项目常见问题解决方案

vim-xcode 项目常见问题解决方案 项目基础介绍 vim-xcode 是一个开源项目&#xff0c;旨在通过 Vim 编辑器与 Xcode 项目进行交互。该项目允许开发者在 Vim 中直接构建、测试和运行 Xcode 项目&#xff0c;从而提高开发效率。vim-xcode 主要使用 Vimscript 编写&#xff0c;并依…

个性化网页计数器

需要一个服务器环境来存放我们的计数器脚本和数据库。对于初学者来说&#xff0c;PHP和MySQL是一个不错的组合&#xff0c;因为它们易于学习且广泛应用。接下来&#xff0c;我们开始编写PHP脚本。这个脚本的主要任务是接收来自网页的请求&#xff0c;并将访问信息存储到数据库中…

详解力扣高频SQL50题之1683. 无效的推文【入门】

传送门&#xff1a;1683. 无效的推文 题目 表&#xff1a;Tweets ----------------------- | Column Name | Type | ----------------------- | tweet_id | int | | content | varchar | ----------------------- 在 SQL 中&#xff0c;tweet_id 是这个表的主键。 content 只…

Spring Boot与Python的联动:实战案例解析

目录一、背景与需求二、技术准备2.1 Spring Boot 基础2.2 Python 环境搭建三、基于 RESTful API 的调用3.1 创建 Python Flask 应用3.2 创建 Spring Boot 应用3.3 测试与验证四、通过 ProcessBuilder 调用 Python 脚本4.1 创建 Python 脚本4.2 Spring Boot 中调用脚本4.3 注意事…

力扣刷题(第九十七天)

灵感来源 - 保持更新&#xff0c;努力学习- python脚本学习密钥格式化解题思路移除原字符串中的所有破折号&#xff0c;并将小写字母转换为大写。从后向前遍历处理后的字符串&#xff0c;每 K 个字符为一组。最后将各组逆序拼接&#xff0c;并用破折号分隔。class Solution:def…

ESP32入门实战:PC远程控制LED灯完整指南

引言&#xff1a;物联网远程控制基础 远程控制是物联网应用的基础功能之一&#xff0c;通过ESP32实现PC远程控制LED灯不仅是一个经典入门项目&#xff0c;更是理解网络通信、嵌入式开发和物联网交互的绝佳实践。本文将详细介绍如何通过WiFi和UDP协议&#xff0c;从零开始构建一…

主流摄像头协议及其开源情况,GB/T 28181协议介绍

一、主流摄像头协议及开源情况 1. RTSP&#xff08;Real Time Streaming Protocol&#xff09; 技术特性&#xff1a;基于TCP/UDP的实时流传输协议&#xff0c;支持双向通信&#xff08;如暂停、播放控制&#xff09;。应用场景&#xff1a;摄像头实时监控、视频点播系统。开源…

「iOS」——RunLoop学习

底层学习iOS--RunLoop学习RunLoop的概念RunLoop与线程的关系RunLoop的结构ModeObserverTimerSourceRunLoop 执行流程RunLoop 的应用1.AutoreleasePool是什么时候释放的2.触控事件的响应3.刷新界面4.线程保活小知识mach Port**Toll-Free Bridging&#xff08;对象桥接&#xff0…

从零构建 Node20+pnpm+pm2 环境镜像:基于 Dockerfile 的两种方案及持久化配置指南

前言&#xff1a;在Node.js项目部署中&#xff0c;环境一致性和服务自动恢复是运维的核心需求。无论是本地开发还是生产部署&#xff0c;使用Docker封装Node20、pnpm&#xff08;高效包管理&#xff09;和pm2&#xff08;进程守护&#xff09;环境&#xff0c;能避免“本地能跑…

【Python机器学习】4.3. 模型优化

喜欢的话别忘了点赞、收藏加关注哦&#xff08;关注即可查看全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 4.3.1. 实战中会遇到的问题 首先看一个例子&#xff1a; 根据任检测数据x1x_1x1​、x2x_2x2…

Impact rating 影响等级定义(学习笔记)

影响等级可以通过四个方面定义&#xff0c;包含安全性safety&#xff0c;经济型financial&#xff0c;操作性operational&#xff0c;和私密性privacy 即[S,F,O,P]这四个方面。每个方面又可以定义四个不同的等级&#xff0c;包含severe&#xff08;严重的&#xff09;&#xff…

同花顺前端潜在面试题目与答案

潜在面试题目与答案 以下是根据您提供的“岗位职责”和“岗位要求”整理出的潜在面试题目和参考答案。请注意&#xff0c;这些答案仅供参考&#xff0c;您需要根据自己的实际经验和理解进行更详细和个性化的阐述。 一、基础技术知识&#xff08;Vue/前端工程化/HTML/CSS/JS&…

J2EE模式---组合实体模式

组合实体模式基础概念组合实体模式&#xff08;Composite Entity Pattern&#xff09;是一种企业级设计模式&#xff0c;属于 J2EE 模式的一种&#xff0c;其核心思想是将多个实体对象组合成一个更高层次的对象&#xff08;组合实体&#xff09;&#xff0c;以简化客户端与这些…

基于CloudBase+React+CodeBudddy的云上智能睡眠应用开发实践

本文详细记录了如何利用CloudBase云开发平台、React前端框架和CodeBudddy智能编程技术栈&#xff0c;构建一个云端智能睡眠监测与分析系统。通过完整的项目实践&#xff0c;探索AIoT时代健康管理应用的开发范式。一、智能睡眠监测&#xff1a;云时代的健康守护者在快节奏的现代…

QML 模型

QML模型基础架构QML采用经典的Model-View-Delegate (MVD)​架构来分离数据与界面&#xff0c;这与MVC模式类似但更加适合声明式UI开发。在这个架构中&#xff1a;​Model​&#xff1a;负责管理数据&#xff0c;可以是简单的整数&#xff0c;也可以是复杂的C自定义模型​View​…